Python Básico: Seus Primeiros Passos na Programação
Tratamento de Erros
Lesson 15 of 16 • 10 XP
Keep your place in this quest
Log in or sign up for free to subscribe, follow lesson progress, and access more learning content.
Erros são inevitáveis em qualquer programa, e o Python oferece várias maneiras de lidar com eles.
O tratamento de erros é crucial para garantir que seu programa continue rodando de forma segura e eficiente, mesmo quando algo inesperado acontece.
Nesta lição, vamos explorar os diferentes tipos de erros, como tratá-los, como gerar seus próprios erros e como garantir que tarefas importantes de limpeza sejam sempre executadas.
Tipos de Erros no Python
Antes de aprendermos a tratar erros, precisamos entender as duas categorias principais:
-
Erros de Sintaxe: Ocorrem quando o código Python não está sintaticamente correto. Eles são detectados pelo interpretador Python antes do programa rodar.
Exemplo: esquecer um dois-pontos após uma declaraçãoif. -
Exceções: Acontecem enquanto o programa está rodando quando algo inesperado ocorre — por exemplo, dividir um número por zero ou tentar acessar um índice inválido em uma lista.
Tratando Exceções com try e except
A forma mais comum de tratar exceções em Python é com blocos try/except:
- O bloco try contém o código que pode causar uma exceção.
- O bloco except contém o código a ser executado se uma exceção for levantada.
Exemplo:
try:
file = open("file.txt", "r")
content = file.read()
print(content)
except IOError:
print("O arquivo não pôde ser aberto.")
Aqui:
- Se "file.txt" não existir ou não puder ser aberto, o Python levanta um
IOError. - O bloco
excepto captura e imprime uma mensagem amigável ao invés de fazer o programa travar.
DICA: Mantenha o bloco try o menor possível — inclua apenas o código que pode falhar, não lógica não relacionada.
Tratando Vários Tipos de Exceções
Você pode tratar diferentes tipos de exceções separadamente usando múltiplos blocos except:
try:
# código que pode levantar exceções
except TypeError:
# trata erros de tipo
except ValueError:
# trata erros de valor
except:
# trata quaisquer outras exceções
O último except sem especificação captura qualquer exceção não tratada — mas use com cuidado, pois pode esconder bugs inesperados.
Levantando Suas Próprias Exceções
Às vezes, seu programa precisa sinalizar que algo deu errado — mesmo que o Python normalmente não considerasse um erro.
Você pode levantar exceções usando a instrução raise.
Exemplo:
def divide(a, b):
if b == 0:
raise ValueError("O segundo argumento não pode ser zero")
return a / b
print(divide(10, 2)) # 5.0
print(divide(10, 0)) # ValueError: O segundo argumento não pode ser zero
Isso permite definir mensagens claras de erro e interromper a execução quando dados inválidos são encontrados.
O bloco finally
O bloco finally define código que sempre será executado — quer tenha ocorrido uma exceção ou não.
É frequentemente usado para liberar recursos como arquivos ou conexões com banco de dados.
Exemplo:
try:
file = open("file.txt", "r")
content = file.read()
print(content)
finally:
file.close()
Mesmo que a leitura do arquivo tenha causado um erro, o bloco finally garante que o arquivo seja fechado.
IMPORTANTE!: Sempre feche arquivos e libere recursos em um bloco finally (ou use a instrução "with") para evitar vazamentos.
Entendido — aqui está uma seção adicional que você pode adicionar à lição Tratamento de Erros, explicando por que "try/except para tudo" é uma má prática e quando o tratamento direcionado é a escolha certa.
Evite Capturar Todas as Exceções Sem Motivo
Um erro comum de iniciantes é envolver grandes blocos de código em um único bloco try/except que captura tudo — ou pior, usar um except: sem especificar o tipo de erro.
Exemplo de má prática:
try:
# muito código não relacionado aqui
except:
pass # ignora silenciosamente todos os erros
Por que isso é perigoso:
- Esconde bugs: erros reais no seu código serão ignorados, dificultando encontrá-los.
- Mascarar a causa: você perde informações sobre o que realmente falhou.
- Pode causar comportamento inesperado: o programa continua rodando em um estado inválido.
Quando Usar o Tratamento Abrangente de Exceções
Capturar todas as exceções (except Exception:) deve ser raro e intencional.
Exemplos onde pode ser apropriado:
- Logging de erro no nível mais alto de um programa, para evitar que ele trave e registrar o erro em um arquivo de log.
- Laços tolerantes a falhas em serviços que precisam continuar rodando (mas ainda assim registrando/reportando o erro antes de continuar).
- Depuração temporária para verificar rapidamente se algo está dando errado — mas apenas como uma ferramenta de curto prazo.
Boas Práticas
- Seja específico: capture apenas as exceções que espera e sabe como tratar.
- Mantenha blocos try pequenos: envolva apenas o código que pode falhar, não funções inteiras.
- Sempre registre ou trate a exceção de forma significativa — não apenas ignore com um "pass".
Sendo seletivo, seu código ficará mais fácil de depurar, mais seguro para rodar e muito mais previsível.
Conclusão
O tratamento de erros é uma parte fundamental da programação em Python:
- Evita falhas inesperadas.
- Permite lidar com problemas de forma elegante.
- Torna seu código mais robusto, confiável e seguro.
Dominando exceções, levantando erros personalizados e usando finally, você escreverá programas melhor preparados para o mundo real.