<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Arquivo para Debugging - Bóson Treinamentos em Ciência e Tecnologia</title>
	<atom:link href="https://www.bosontreinamentos.com.br/tag/debugging/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.bosontreinamentos.com.br/tag/debugging/</link>
	<description>Artigos e Tutoriais sobre Desenvolvimento de Software, Bancos de Dados SQL, Linux, Lógica de Programação, Inteligência Artificial, Hardware, Eletrônica, Arduino, Técnicas e Teorias de Estudo e Aprendizagem, Carreira em TI, Ciências Cognitivas, e muito mais!</description>
	<lastBuildDate>Wed, 20 Jul 2022 18:56:06 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.5</generator>
	<item>
		<title>Erros e Manipulação de Exceções em Python</title>
		<link>https://www.bosontreinamentos.com.br/programacao-em-python/erros-e-manipulacao-de-excecoes-em-python/</link>
					<comments>https://www.bosontreinamentos.com.br/programacao-em-python/erros-e-manipulacao-de-excecoes-em-python/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Wed, 20 Jul 2022 18:56:06 +0000</pubDate>
				<category><![CDATA[Programação em Python]]></category>
		<category><![CDATA[Debugging]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=18592</guid>

					<description><![CDATA[<p>Erro e Exceções em Python Existem duas grandes &#8220;categorias&#8221; de erros que podem ocorrer em um programa: Erros de Sintaxe Exceções ou Erros Lógicos Erros de Sintaxe são erros que ocorrem quando um código não segue as regras formais da linguagem usada &#8211; por exemplo, esquecer de fechar chaves em blocos de código, ponto-e-vírgula no final de declarações, usar palavras-chave com grafia incorreta e, no caso do Python, não empregar identação adequada, entre outras. São erros detectados no momento em que tentamos rodas a aplicação, e de resolução muito simples. Já as Exceções, ou Erros Lógicos, ocorrem quando o programa é executado de uma forma que possa gerar um problema não previsto durante seu desenvolvimento, mesmo com a sintaxe perfeita. Por exemplo, tentar entrar com strings de texto no lugar de números em cálculos aritméticos, acessar recursos inexistentes de rede ou bancos de dados, ou realizar operações proibidas, como a famigerada divisão por zero. As exceções são eventos especiais &#8211; geralmente erros &#8211; que ocorrem em tempo de execução. Quando um erro desses ocorre, o Python cria um objeto do tipo Exception. Este objeto deve ser manipulado corretamente, caso contrário apenas imprimirá na tela um traceback do erro com alguns [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/programacao-em-python/erros-e-manipulacao-de-excecoes-em-python/">Erros e Manipulação de Exceções em Python</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Erro e Exceções em Python</h2>
<p>Existem duas grandes &#8220;categorias&#8221; de erros que podem ocorrer em um programa:</p>
<ol>
<li>Erros de Sintaxe</li>
<li>Exceções ou Erros Lógicos</li>
</ol>
<p><strong>Erros de Sintaxe</strong> são erros que ocorrem quando um código não segue as regras formais da linguagem usada &#8211; por exemplo, esquecer de fechar chaves em blocos de código, ponto-e-vírgula no final de declarações, usar palavras-chave com grafia incorreta e, no caso do Python, não empregar identação adequada, entre outras.</p>
<p>São erros detectados no momento em que tentamos rodas a aplicação, e de resolução muito simples.</p>
<p>Já as <strong>Exceções</strong>, ou Erros Lógicos, ocorrem quando o programa é executado de uma forma que possa gerar um problema não previsto durante seu desenvolvimento, mesmo com a sintaxe perfeita. Por exemplo, tentar entrar com strings de texto no lugar de números em cálculos aritméticos, acessar recursos inexistentes de rede ou bancos de dados, ou realizar operações proibidas, como a famigerada divisão por zero.</p>
<p>As exceções são eventos especiais &#8211; <em>geralmente erros</em> &#8211; que ocorrem em tempo de execução. Quando um erro desses ocorre, o Python cria um objeto do tipo <strong>Exception</strong>.</p>
<p>Este objeto deve ser manipulado corretamente, caso contrário apenas imprimirá na tela um traceback do erro com alguns detalhes técnicos a respeito, além de parar inesperadamente a execução do script (trava o programa ou o finaliza) &#8211; o que não ajuda o usuário em praticamente nada.</p>
<p>As técnicas de manipulação de exceções permitem que os programadores criem aplicações que conseguem manipular as exceções (resolver os erros que porventura ocorram durante sua execução).</p>
<p>Uma das grandes vantagens de manipular corretamente as exceções é a possibilidade do programa continuar a rodar mesmo após a ocorrência de um erro, ou se isto não for possível devido a um erro grave, notificar o usuário de que um erro ocorreu e que o programa será encerrado, de forma mais graciosa do que simplesmente travar e ser fechado abruptamente.</p>
<p>Chamamos o processo de capturar e apresentar um erro de &#8220;<strong>lançar uma exceção</strong> (&#8216;<em>throw an exception</em>&#8216;)&#8221; ou &#8220;<strong>levantar uma exceção</strong> (&#8216;<em>raise an exception</em>&#8216;)&#8221;</p>
<p>Existem muitas exceções internas (built-in) no Python que são lançadas quando um erro específico ocorre. Por exemplo, uma exceção <strong>ImportError</strong> é lançada quando um módulo importado pelo script não é encontrado.</p>
<p>Podemos visualizar todas as exceções internas com a função local():</p>
<pre><strong><span style="color: #ff0000;">print(dir(locals()['__builtins__']))</span></strong></pre>
<p>Resultado:</p>
<pre><span style="color: #000000;">['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BlockingIOError', 'BrokenPipeError', 'BufferError', 'BytesWarning', 'ChildProcessError', 'ConnectionAbortedError', 'ConnectionError', 'ConnectionRefusedError', 'ConnectionResetError', 'DeprecationWarning', 'EOFError', 'Ellipsis', 'EnvironmentError', 'Exception', 'False', 'FileExistsError', 'FileNotFoundError', 'FloatingPointError', 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError', 'ImportWarning', 'IndentationError', 'IndexError', 'InterruptedError', 'IsADirectoryError', 'KeyError', 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'ModuleNotFoundError', 'NameError', 'None', 'NotADirectoryError', 'NotImplemented', 'NotImplementedError', 'OSError', 'OverflowError', 'PendingDeprecationWarning', 'PermissionError', 'ProcessLookupError', 'RecursionError', 'ReferenceError', 'ResourceWarning', 'RuntimeError', 'RuntimeWarning', 'StopAsyncIteration', 'StopIteration', 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError', 'TimeoutError', 'True', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning', 'ValueError', 'Warning', 'ZeroDivisionError', '__build_class__', '__debug__', '__doc__', '__import__', '__loader__', '__name__', '__package__', '__spec__', 'abs', 'all', 'any', 'ascii', 'bin', 'bool', 'breakpoint', 'bytearray', 'bytes', 'callable', 'chr', 'classmethod', 'compile', 'complex', 'copyright', 'credits', 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'exec', 'exit', 'filter', 'float', 'format', 'frozenset', 'getattr', 'globals', 'hasattr', 'hash', 'help', 'hex', 'id', 'input', 'int', 'isinstance', 'issubclass', 'iter', 'len', 'license', 'list', 'locals', 'map', 'max', 'memoryview', 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'print', 'property', 'quit', 'range', 'repr', 'reversed', 'round', 'set', 'setattr', 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'vars', 'zip']</span>
<span style="color: #000000;">** Process exited - Return Code: 0 **</span>
<span style="color: #000000;">Press Enter to exit terminal</span></pre>
<p>E também consultá-las na documentação oficial (seção &#8220;Concrete Exceptions&#8221;) para entender em detalhes o que faz cada uma delas: <a href="https://docs.python.org/3/library/exceptions.html" target="_blank" rel="noopener">https://docs.python.org/3/library/exceptions.html</a></p>
<h3>Manipulação de Exceções</h3>
<p>Manipulamos as exceções no Python com as declarações <strong>try, except, else </strong>e<strong> finally</strong>.</p>
<p>A manipulação é feita em duas grandes etapas:</p>
<ol>
<li>Capturar uma exceção, que é detectar se uma exceção ocorreu; e</li>
<li>Tratar a exceção, que significa tomar uma ação apropriada para minimizar ou resolver o problema ocorrido.</li>
</ol>
<p>A principal declaração para tratamento de exceções é a declaração <strong>try</strong>. Colocamos o código da operação crítica que pode levantar uma exceção dentro de um bloco try.</p>
<p>Em um bloco <strong>except</strong> colocamos o código que deve tratar a exceção, caso ocorra.</p>
<p><strong>Exemplo: capturar exceções genéricas</strong></p>
<pre><span style="color: #ff0000;"><span style="color: #339966;"># importamos o módulo sys para visualizarmos o tipo da exceção</span>
import sys</span>
<span style="color: #ff0000;">item = 0 # testar tb com 22 e 'Bóson'</span>
<span style="color: #ff0000;"><span style="color: #339966;"># Descomente a linha a seguir para ver o que ocorre quando não há manipulação das exceções.</span>
<span style="color: #339966;">#divisao = 1 / item</span></span>
<span style="color: #ff0000;">try:</span>
<span style="color: #ff0000;">    divisao = 1/item</span>
<span style="color: #ff0000;">    print("Valor:", item) </span>
<span style="color: #ff0000;">    print("1 dividido por", item, "é", divisao)</span>
<span style="color: #ff0000;">except:</span>
<span style="color: #ff0000;">    print("Ocorreu a exceção", sys.exc_info()[0])</span>
<span style="color: #ff0000;">    print()</span></pre>
<pre><span style="color: #000000;">Ocorreu a exceção &lt;class 'ZeroDivisionError'&gt;</span></pre>
<h4>Capturar exceções específicas</h4>
<p>Podemos capturar exceções específicas usando classes apropriadas, caso saibamos de antemão o tipo de erro que pode vir a a ocorrer no script, como por exemplo erros de tipo incorreto ou a clássica divisão por zero.</p>
<p>Assim, podemos dar um tratamento adequado a cada caso de erro que ocorra.</p>
<pre><span style="color: #ff0000;">import sys</span>
<span style="color: #ff0000;">item = 0 # testar tb com 22 e 'Bóson'</span>
<span style="color: #ff0000;">try:</span>
<span style="color: #ff0000;">    print("Valor:", item)</span>
<span style="color: #ff0000;">    divisao = 1/item</span>
<span style="color: #ff0000;">    print("1 dividido por", item, "é", divisao)</span>
<span style="color: #ff0000;">except (TypeError):</span>
<span style="color: #339966;">    # Manipular tipo incorreto</span>
<span style="color: #ff0000;">    print("Você deve digitar apenas números!")</span>
<span style="color: #ff0000;">    print()</span>
<span style="color: #ff0000;">except (ZeroDivisionError):</span>
<span style="color: #339966;">    # Manipular divisão por zero</span>
<span style="color: #ff0000;">    print("Não é possível dividir por zero.")</span>
<span style="color: #ff0000;">    print()</span>
<span style="color: #ff0000;">except:</span>
<span style="color: #339966;">    # Manipular outras exceções não conhecidas</span>
<span style="color: #ff0000;">    print("Ocorreu a exceção", sys.exc_info()[0])</span></pre>
<pre><span style="color: #000000;">Valor: 0</span>
<span style="color: #000000;">Não é possível dividir por zero.</span>
<span style="color: #000000;">Valor: 22</span>
<span style="color: #000000;">1 dividido por 22 é 0.045454545454545456</span>
<span style="color: #000000;">Valor: Bóson</span>
<span style="color: #000000;">Você deve digitar apenas números!</span></pre>
<h4>A cláusula else</h4>
<p>A cláusula else permite executar um bloco de código caso o código dentro do bloco try tenha sido executado sem erros (ou seja, sem lançar nenhuma exceção).</p>
<pre><span style="color: #339966;"># Bloco else</span>
<span style="color: #ff0000;">import sys</span>
<span style="color: #ff0000;">item = 0 # testar tb com 22 e 'Bóson'</span>
<span style="color: #ff0000;">try:</span>
<span style="color: #ff0000;">    print("Valor:", item)</span>
<span style="color: #ff0000;">    divisao = 1/item</span>
<span style="color: #ff0000;">except (TypeError):</span>
<span style="color: #339966;">    # Manipular tipo incorreto</span>
<span style="color: #ff0000;">    print("Você deve digitar apenas números!")</span>
<span style="color: #ff0000;">    print()</span>
<span style="color: #ff0000;">except (ZeroDivisionError):</span>
<span style="color: #339966;">    # Manipular divisão por zero</span>
<span style="color: #ff0000;">    print("Não é possível dividir por zero.")</span>
<span style="color: #ff0000;">    print()</span>
<span style="color: #ff0000;">except:</span>
<span style="color: #339966;">    # Manipular outras exceções</span>
<span style="color: #ff0000;">    print("Ocorreu a exceção", sys.exc_info()[0])</span>
<span style="color: #ff0000;">else:</span>
<span style="color: #ff0000;">    print("1 dividido por", item, "é", divisao)</span></pre>
<pre><span style="color: #000000;">Valor: 0</span>
<span style="color: #000000;">Não é possível dividir por zero.</span>
<span style="color: #000000;">Valor: 22</span>
<span style="color: #000000;">1 dividido por 22 é 0.045454545454545456</span></pre>
<h4>A cláusula finally</h4>
<p>Todo código inserido em uma cláusula <strong>finally</strong> é executado independentemente de ter havido ou não erros na execução do bloco try.</p>
<p>Geralmente colocamos aqui código empregado para liberar recursos externos, como conexões a bancos de dados, acesso a recursos de rede ou um arquivo aberto.</p>
<pre><span style="color: #339966;"># Bloco finally</span>
<span style="color: #ff0000;">import sys</span>
<span style="color: #ff0000;">item = 22</span>
<span style="color: #ff0000;">try:</span>
<span style="color: #ff0000;">    divisao = 1/item</span>
<span style="color: #ff0000;">    print("Valor:", item) </span>
<span style="color: #ff0000;">except (TypeError):</span>
<span style="color: #339966;">    # Manipular tipo incorreto</span>
<span style="color: #ff0000;">    print("Você deve digitar apenas números!")</span>
<span style="color: #ff0000;">    print()</span>
<span style="color: #ff0000;">except (ZeroDivisionError):</span>
<span style="color: #339966;">    # Manipular divisão por zero</span>
<span style="color: #ff0000;">    print("Não é possível dividir por zero.")</span>
<span style="color: #ff0000;">    print()</span>
<span style="color: #ff0000;">except:</span>
<span style="color: #339966;">    # Manipular outras exceções</span>
<span style="color: #ff0000;">    print("Ocorreu a exceção", sys.exc_info()[0])</span>
<span style="color: #ff0000;">else:</span>
<span style="color: #ff0000;">    print("1 dividido por", item, "é", divisao)</span>
<span style="color: #ff0000;">finally:</span>
<span style="color: #ff0000;">    print("O valor fornecido foi:", item)</span></pre>
<pre><span style="color: #000000;">Valor: 22</span>
<span style="color: #000000;">1 dividido por 22 é 0.045454545454545456</span>
<span style="color: #000000;">O valor fornecido foi: 22</span>
<span style="color: #000000;">Não é possível dividir por zero.</span>
<span style="color: #000000;">O valor fornecido foi: 0</span>
<span style="color: #000000;">Você deve digitar apenas números!</span>
<span style="color: #000000;">O valor fornecido foi: Fábio dos Reis</span></pre>
<h4>Lançar exceções manualmente</h4>
<p>Podemos lançar exceções manualmente com a palavra-chave <strong>raise</strong>, que indica que uma exceção ocorreu. Quando uma declaração raise é executada, o Python cria um objeto da classe de exceção especificada.</p>
<pre><span style="color: #339966;"># Declaração raise</span>
<span style="color: #ff0000;">import sys</span>
<span style="color: #ff0000;">item = -22</span>
<span style="color: #ff0000;">try:</span>
<span style="color: #ff0000;">    divisao = 1/item</span>
<span style="color: #ff0000;">    if item &lt;= 0:</span>
<span style="color: #ff0000;">        raise ValueError("Não são aceitos números negativos nesta aplicação!")</span>
<span style="color: #ff0000;">    print("Valor:", item) </span>
<span style="color: #ff0000;">except (TypeError):</span>
<span style="color: #339966;">    # Manipular tipo incorreto</span>
<span style="color: #ff0000;">    print("Você deve digitar apenas números!")</span>
<span style="color: #ff0000;">    print()</span>
<span style="color: #ff0000;">except (ZeroDivisionError):</span>
<span style="color: #339966;">    # Manipular divisão por zero</span>
<span style="color: #ff0000;">    print("Não é possível dividir por zero.")</span>
<span style="color: #ff0000;">    print()</span>
<span style="color: #ff0000;">except (ValueError) as erro:</span>
<span style="color: #ff0000;">    print(erro)</span>
<span style="color: #ff0000;">except:</span>
<span style="color: #339966;">    # Manipular outras exceções</span>
<span style="color: #ff0000;">    print("Ocorreu a exceção", sys.exc_info()[0])</span>
<span style="color: #ff0000;">else:</span>
<span style="color: #ff0000;">    print("1 dividido por", item, "é", divisao)</span>
<span style="color: #ff0000;">finally:</span>
<span style="color: #ff0000;">    print("O valor fornecido foi:", item)</span></pre>
<pre><span style="color: #000000;">Valor: 30</span>
<span style="color: #000000;">1 dividido por 30 é 0.03333333333333333</span>
<span style="color: #000000;">O valor fornecido foi: 30</span>
<span style="color: #000000;">Não são aceitos números negativos nesta aplicação!</span>
<span style="color: #000000;">O valor fornecido foi: -22</span></pre>
<p>Também podemos definir nossas próprias exceções, criando uma <strong>Exceção Definida pelo Usuário</strong> &#8211; assunto que abordaremos em outro artigo.</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/programacao-em-python/erros-e-manipulacao-de-excecoes-em-python/">Erros e Manipulação de Exceções em Python</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/programacao-em-python/erros-e-manipulacao-de-excecoes-em-python/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
