Dominando Erros e Exceções Built-in do Python
Erros e Exceções Built-in do Python
Descubra como o Python sinaliza problemas, a diferença entre erros de sintaxe e runtime, e como lidar com exceções built-in com confiança.
Vídeo: Tratamento de Exceções em Python
Quando você executa um programa Python, o interpretador para a execução imediatamente se encontrar um erro não tratado. Esses erros se enquadram em duas categorias amplas:
- Erros de sintaxe — problemas detectados durante o parsing.
- Erros lógicos (exceções) — problemas que surgem durante a execução do código.
Erros de Sintaxe em Python
Erro de sintaxe ocorre quando código-fonte viola regras gramaticais do Python. O interpretador aponta localização exata com caret (^) na mensagem de erro.
> >>> if a < 3
File "<interactive input>", line 1
if a < 3
^
SyntaxError: invalid syntax
Neste exemplo, a falta de dois-pontos (:) após o statement if dispara SyntaxError.
Erros Lógicos (Exceções) em Python
Erros lógicos, ou exceções, surgem apenas após o código passar na verificação de sintaxe. Exemplos comuns incluem:
- Tentar dividir por zero (
ZeroDivisionError) - Abrir arquivo inexistente (
FileNotFoundError) - Importar módulo indisponível (
ImportError)
Quando exceção é levantada, Python cria objeto de exceção. Se não tratada, um traceback é impresso, mostrando call stack e razão da falha.
> >>> 1 / 0
Traceback (most recent call last):
File "<string>", line 301, in runcode
File "<interactive input>", line 1, in <module>
ZeroDivisionError: division by zero
> >>> open("imaginary.txt")
Traceback (most recent call last):
File "<string>", line 301, in runcode
File "<interactive input>", line 1, in <module>
FileNotFoundError: [Errno 2] No such file or directory: 'imaginary.txt'
Exceções Built-in do Python
O interpretador Python levanta uma ampla gama de exceções built-in para sinalizar diferentes condições de falha. Você pode listá-las com:
print(dir(locals()['__builtins__']))
Abaixo referência concisa para algumas das exceções built-in mais frequentes e situações que as disparam:
| Exceção | Causa do Erro |
|---|---|
AssertionError | Levantada quando statement assert falha. |
AttributeError | Levantada quando atribuição ou referência de atributo falha. |
EOFError | Levantada quando função input() atinge condição end-of-file. |
FloatingPointError | Levantada quando operação de ponto flutuante falha. |
GeneratorExit | Levantada quando método close() de generator é chamado. |
ImportError | Levantada quando módulo importado não pode ser encontrado. |
IndexError | Levantada quando índice de sequência está fora do intervalo. |
KeyError | Levantada quando chave está ausente de dicionário. |
KeyboardInterrupt | Levantada quando usuário pressiona Ctrl+C ou Delete. |
MemoryError | Levantada quando operação excede memória disponível. |
NameError | Levantada quando variável não encontrada em escopo local ou global. |
NotImplementedError | Levantada por métodos abstratos sem implementação. |
OSError | Levantada para erros relacionados a sistema (ex.: I/O de arquivo). |
OverflowError | Levantada quando resultado aritmético é grande demais para representar. |
ReferenceError | Levantada quando weak reference proxy para objeto garbage-collected. |
RuntimeError | Levantada para erros que não se encaixam em outras categorias. |
StopIteration | Levantada por next() quando iterador esgota. |
SyntaxError | Levantada quando parser encontra sintaxe inválida. |
IndentationError | Levantada quando indentação incorreta. |
TabError | Levantada quando indentação mistura tabs e espaços inconsistente. |
SystemError | Levantada quando interpretador detecta erro interno. |
SystemExit | Levantada por sys.exit(). |
TypeError | Levantada quando operação/função recebe objeto de tipo inapropriado. |
UnboundLocalError | Levantada quando variável local referenciada antes de atribuição. |
UnicodeError | Levantada para erros de encoding/decoding Unicode. |
UnicodeEncodeError | Levantada durante erros de encoding Unicode. |
UnicodeDecodeError | Levantada durante erros de decoding Unicode. |
UnicodeTranslateError | Levantada durante erros de tradução Unicode. |
ValueError | Levantada quando função recebe argumento de tipo correto mas valor inapropriado. |
ZeroDivisionError | Levantada ao dividir ou módulo por zero. |
Se precisar controle mais granular, Python permite definir classes de exceção customizadas. Veja Python User-defined Exceptions para detalhes.
Tratar exceções é direto com blocos try, except e finally. Para aprofundamento, consulte Python try, except and finally statements.
python
- Palavras-chave e Identificadores em Python: Dominando Palavras Reservadas e Convenções de Nomenclatura
- Declarações, Indentação e Comentários em Python: Guia Claro
- Variáveis, Constantes e Literais em Python – Guia Completo
- Dominando Conversão e Casting de Tipos em Python: Guia Completo
- Dominando I/O e Importação de Módulos em Python: Guia Prático
- Entendendo Variáveis Globais, Locais e Nonlocal em Python
- Dominando Números, Conversão de Tipos e Matemática em Python
- Dominando Operações com Diretórios e Arquivos em Python
- Dominando Exceções Customizadas em Python: Guia Prático
- Obter Data e Hora Atuais em Python: Guia Prático