Códigos de Erro do Python
Os códigos de erro do Python representam exceções que ocorrem quando o programa encontra operações inválidas ou incorretas. Compreender esses erros é essencial para o desenvolvimento de sistemas robustos e confiáveis, permitindo que desenvolvedores identifiquem rapidamente a origem de falhas, corrijam bugs e implementem soluções de forma eficiente. Esses erros podem surgir durante o desenvolvimento quando há problemas de sintaxe, tipos de dados incorretos, acesso a recursos inexistentes ou lógica de programação inadequada. Conceitos-chave incluem sintaxe, tipos de exceção, técnicas de depuração e tratamento de erros. Este guia fornece uma referência completa dos erros mais comuns do Python, descrevendo quando e como eles ocorrem, exemplos práticos e melhores práticas de tratamento. O leitor aprenderá a detectar, capturar e corrigir erros, além de aplicar estratégias de depuração avançadas que aumentam a estabilidade e a confiabilidade de aplicações backend críticas.
Por exemplo, considere um sistema que processa entradas de usuário, lê arquivos e se conecta a um banco de dados. Nesse cenário, erros como FileNotFoundError
, ValueError
ou ZeroDivisionError
podem ocorrer. Para garantir a robustez, operações críticas são envolvidas em blocos try
, e cada exceção é tratada em blocos except
específicos. Isso permite reagir adequadamente a cada tipo de erro, registrar informações de depuração e aplicar soluções alternativas. O bloco finally
assegura que recursos essenciais, como arquivos ou conexões com o banco de dados, sejam liberados mesmo em caso de erro. Essa abordagem evita falhas inesperadas, aumenta a manutenibilidade do código e garante que sistemas backend funcionem de forma estável e confiável em ambientes de produção.
Example
pythondef process_data():
try:
# NameError: uso de variável não definida
print(variavel_indefinida)
# ZeroDivisionError: divisão por zero
resultado = 10 / 0
# ValueError: conversão inválida
numero = int("abc")
# FileNotFoundError: arquivo inexistente
with open("arquivo_inexistente.txt", "r") as f:
conteudo = f.read()
# AttributeError: chamada de método inexistente
[].appendx(1)
except NameError as ne:
print(f"Capturado NameError: {ne}")
except ZeroDivisionError as zde:
print(f"Capturado ZeroDivisionError: {zde}")
except ValueError as ve:
print(f"Capturado ValueError: {ve}")
except FileNotFoundError as fe:
print(f"Capturado FileNotFoundError: {fe}")
except AttributeError as ae:
print(f"Capturado AttributeError: {ae}")
except Exception as e:
print(f"Outras exceções capturadas: {e}")
finally:
print("Liberação de recursos e limpeza concluídas.")
process_data()
📊 Comprehensive Reference
Error | Descrição | Quando Ocorre | Exemplo | Observações |
---|---|---|---|---|
SyntaxError | Erro de sintaxe | Código inválido | eval('x === 2') |
Ocorre em tempo de compilação |
IndentationError | Erro de indentação | Indentação incorreta | if True:\nprint("Oi") |
Subtipo de SyntaxError |
TabError | Mistura de tabulação e espaços | Uso simultâneo de tab e espaço | <tab> <space> print("Oi") |
Indentação uniforme necessária |
NameError | Variável não definida | Uso de variável inexistente | print(x) |
Erro comum em depuração |
TypeError | Tipo incorreto | Operação com tipo inadequado | 5 + "5" |
Python é dinamicamente tipado |
ValueError | Valor inválido | Conversão ou valor inválido | int("abc") |
Verificar entrada |
IndexError | Índice fora de alcance | Acesso a índice inexistente | lst = []; lst[1] |
Verificar comprimento da lista |
KeyError | Chave inexistente | Acesso a chave de dicionário inexistente | d = {}; d['x'] |
Uso de dict.get() pode evitar |
AttributeError | Atributo inexistente | Chamada de método ou atributo inexistente | [].appendx(1) |
Verificar nome do método |
ZeroDivisionError | Divisão por zero | Denominador zero | 10 / 0 |
Verificar denominador |
ImportError | Módulo não encontrado | Módulo inexistente | import modulo_inexistente |
Verificar instalação |
ModuleNotFoundError | Módulo não encontrado | Módulo inexistente | import nao_existe |
Python 3.6+ |
FileNotFoundError | Arquivo não encontrado | Arquivo inexistente | open("naoexiste.txt") |
Verificar caminho |
IsADirectoryError | Esperado arquivo, diretório encontrado | Abrindo diretório | open("pasta") |
Dependente do SO |
NotADirectoryError | Esperado diretório, arquivo encontrado | os.listdir("arquivo.txt") |
Dependente do SO | |
PermissionError | Permissão insuficiente | Acesso negado | open("/root/file") |
Verificar permissões |
OSError | Erro do sistema | Problema relacionado ao SO | os.remove("/root/file") |
Base de outros erros |
OverflowError | Overflow numérico | Valor muito grande | 2.0**10000 |
Raro em Python 3 |
RecursionError | Recursão excessiva | Muitas chamadas recursivas | def f(): f(); f() |
sys.setrecursionlimit() |
MemoryError | Memória insuficiente | Dados muito grandes | a = 'a'*10**10 |
Dependente do sistema |
StopIteration | Iterador esgotado | Iterator vazio | next(iter([])) |
Iteradores personalizados |
AssertionError | Falha em assert | assert False |
Verificar condições | |
FloatingPointError | Erro de ponto flutuante | Operação FP inválida | numpy.seterr(all='raise') |
NumPy |
UnicodeError | Erro de codificação/decodificação | "ü".encode("ascii") |
Verificar encoding | |
UnicodeDecodeError | Erro de decodificação | b'\xff'.decode('utf-8') |
Leitura de arquivo | |
UnicodeEncodeError | Erro de codificação | "ü".encode("ascii") |
Encoding inválido | |
RecursionWarning | Aviso de recursão | Recursão profunda | import warnings |
Não fatal |
DeprecationWarning | Aviso de função obsoleta | Uso de função antiga | warnings.warn("deprecated") |
Migrar código |
RuntimeWarning | Aviso de tempo de execução | Problema potencial | import warnings |
Não fatal |
FutureWarning | Aviso de mudanças futuras | Alterações em futuras versões | warnings.warn("future") |
Verificar compatibilidade |
UserWarning | Aviso do usuário | Aviso customizado | warnings.warn("user") |
Não fatal |
PendingDeprecationWarning | Obsolescência iminente | Função será descontinuada | warnings.warn("pending") |
Raro |
ResourceWarning | Recurso não liberado | Arquivo não fechado | open("file") |
Python 3+ |
ArithmeticError | Erro aritmético | Operação matemática inválida | int("x")/0 |
Base para outros erros |
BufferError | Erro de buffer | Operação inválida de buffer | memoryview(b'').release() |
Raro |
ConnectionError | Erro de conexão | Problema de rede | requests.get("bad_url") |
Dependente de rede |
BrokenPipeError | Pipe quebrado | Escrita em pipe fechado | os.write(fd, b'data') |
Unix |
ChildProcessError | Erro de processo filho | Problema em processo filho | os.waitpid(-1) |
Raro |
EOFError | Fim inesperado de arquivo | Entrada finalizada | input() EOF |
Entrada vazia |
EnvironmentError | Erro de ambiente | Problema de OS/ambiente | os.remove("/root/file") |
Base OSError |
GeneratorExit | Saída de generator | gen.close() |
Generators | |
IOError | Erro de I/O | Falha de leitura/escrita | open("/root/file") |
Python 3 -> OSError |
InterruptedError | Interrompido | System call interrompido | os.read(fd, 0) |
Unix |
LookupError | Erro de pesquisa | Pesquisa inválida | d['x'] |
Base Lookup |
ReferenceError | Referência inválida | Weak ref expirou | import weakref |
Raro |
RuntimeError | Erro em tempo de execução | raise RuntimeError() |
Erro geral | |
StopAsyncIteration | Fim de async iterator | async for |
Python 3.5+ | |
SyntaxWarning | Aviso de sintaxe | Sintaxe suspeita | warnings.warn("syntax") |
Não interrompe programa |
SystemError | Erro do sistema | Erro interno do Python | sys._getframe(0) |
Raro |
SystemExit | Saída do sistema | sys.exit() |
Finaliza programa | |
TimeoutError | Tempo esgotado | Timeout de operação | socket.settimeout() |
Rede |
UnboundLocalError | Variável local não atribuída | Uso antes da atribuição | x=1; def f(): print(x); x=2 |
Subtipo NameError |
ZeroDivisionError | Divisão por zero | Denominador zero | 10 / 0 |
Verificar denominador |
🧠 Teste Seu Conhecimento
Test Your Knowledge
Teste seu conhecimento sobre códigos de erro do Python
📝 Instruções
- Leia cada pergunta cuidadosamente
- Selecione a melhor resposta para cada pergunta
- Você pode refazer o quiz quantas vezes quiser
- Seu progresso será mostrado no topo