1.1 Surgimento de Erro
Erros (e exceções) são parte essencial da programação. Eles surgem quando o programa se depara com situações imprevistas, que ele não consegue processar. Em Python existe um sistema de tratamento de exceções que permite capturar e tratar erros, evitando que o programa encerre.
Exceções geralmente surgem nas seguintes situações:
Erros de Sintaxe:
Esses erros são detectados na fase de compilação do código e estão relacionados com a gramática incorreta da linguagem Python. Por exemplo, falta de dois pontos ou palavras-chave incorretas.
if True:
print("Hello")
Erros de Execução (Runtime Errors)
:
Esses erros ocorrem durante a execução do programa e podem ser causados por vários motivos, como divisão por zero, acesso a um índice inexistente na lista, uso incorreto de tipos de dados, etc.
print(1 / 0) # ZeroDivisionError
Erros Lógicos:
Esses erros surgem quando o programa funciona sem falhas, mas gera um resultado incorreto devido a um erro na lógica do programa. Erros lógicos não geram exceções e são mais difíceis de depurar.
Erros lógicos geralmente são chamados de bugs — são como se fossem algumas falhas na funcionalidade do programa. Já os erros de execução são chamados de exceções. Para cada erro, o Python cria um objeto especial (exceção) e o "lança" no programa...
1.2 Caminho das Exceções
Quando uma exceção ocorre em Python, ela é elevada pela pilha de chamadas até ser tratada. A pilha de chamadas representa a sequência de chamadas de funções que levaram à ocorrência da exceção.
Mecanismo de Elevação de Exceções
- Surgimento da Exceção: Quando ocorre um erro, o Python cria um objeto de exceção.
- Busca pelo Tratador de Exceção: O interpretador Python começa a busca pelo tratador de exceção no bloco de código atual. Se o tratador não for encontrado, ele passa para o próximo bloco de código que chamou a função atual.
- Elevação da Exceção pela Pilha: Este processo se repete até ser encontrado um tratador ou a pilha de chamadas ser esgotada.
- Encerramento do Programa: Se nenhum tratador for encontrado, o programa encerra sua execução e imprime uma mensagem de erro.
Exemplo:
def func_a():
func_b()
def func_b():
func_c()
def func_c():
print(1 / 0) # Aqui ocorre a exceção ZeroDivisionError
func_a()
Neste exemplo, a exceção ZeroDivisionError
ocorre na função
func_c
, e então é elevada pela pilha de chamadas até
func_b
e func_a
.
Se não for encontrado um tratador, o programa vai encerrar com
um erro.
1.3 Leitura do Log
Quando o programa encerra por causa de uma exceção não tratada, o Python imprime o rastreamento da pilha (traceback), que ajuda os desenvolvedores a entender o que deu errado. O rastreamento da pilha contém informações sobre a sequência de chamadas de funções que levaram à ocorrência da exceção e pode ser analisado para depurar o programa.
Exemplo de traceback
Traceback (most recent call last):
File "example.py", line 10, in
func_a()
File "example.py", line 2, in func_a
func_b()
File "example.py", line 5, in func_b
func_c()
File "example.py", line 8, in func_c
print(1 / 0)
ZeroDivisionError: division by zero
Análise do Rastreamento da Pilha
- Tipo de Exceção e Mensagem: No final do traceback, é indicado o tipo de exceção e a mensagem. No
exemplo dado, é
ZeroDivisionError: division by zero
. - Sequência de Chamadas: O rastreamento da pilha mostra a sequência de chamadas de
funções. No nosso exemplo, a falha ocorreu na linha
print(1 / 0)
na funçãofunc_c
, que foi chamada a partir defunc_b
, que por sua vez foi chamada a partir defunc_a
. - Arquivos e Linhas de Código: Em cada linha do traceback, é indicado o arquivo e o número da linha onde ocorreu a chamada. Isso ajuda a localizar e corrigir rapidamente o erro no código.
Uso Prático do Rastreamento da Pilha
O rastreamento da pilha é uma ferramenta importante para depuração e análise de programas. Ele ajuda os desenvolvedores a entender a causa da falha e encontrar o local no código onde ela ocorreu. Aqui estão algumas dicas sobre como usar o rastreamento da pilha:
- Leia de baixo para cima: Comece a análise pela chamada mais baixa no traceback, pois é onde a exceção ocorreu.
- Verifique todas as chamadas: Examine todas as chamadas no traceback para entender o caminho pelo qual a exceção foi transmitida.
- Corrija o código: Use as informações do traceback para corrigir o código e prevenir erros semelhantes no futuro.
Você aprenderá mais sobre exceções nas próximas palestras.
GO TO FULL VERSION