Clique sobre os tópicos listados abaixo para navegar até o conteúdo desejado.

  1. Entender o que é uma exception
  2. Entender como recuperar informações de um exception
  3. Entender como lançar uma exception
  4. Entender o básico sobre Traceback
  5. Entender como relançar uma exception
  6. Tabela de atributos de uma exception
  7. Tabela de métodos/atributos traceback

Uma exceção, é um evento ou acontecimento não desejado que pode ocorrer durante a execução de nossos programas em Python, como erros de acesso a memória, falhas ao abrir um arquivo e outros.

Quando esse exceção acontece, um objeto de um tipo de exceção é lançado para tenhamos conhecimento de que um tratamento deve ser feito. Esse objeto contém as informações sobre o erro ocorrido.

Na linguagem Python, os métodos que podem lançar exceções são declarados de tal forma que o uso desses fora de um bloco try-except faz com que o compilador exiba um erro de compilação.

Quando uma exceção ocorre, precisamos obter algumas informações básicas como: a mensagem do erro, onde o erro ocorreu e outros.

Abaixo, recuperarmos a informação de mensagem e tipo da exceção lançada. Outros informações podem ser conferidas no traceback que será visto mais adiante.

Exemplo 1
try:
    print(1/0)
except Exception as e:
    print("mensagem:",e) #mensagem
    print("classe:",e.__class__) #nome da class
Saída
mensagem: division by zero
classe: <class 'ZeroDivisionError'>

O Traceback armazena todas as chamadas e funções feitas em nossos programas até a linha em que uma exceção foi lançada. Por ser uma Stack(Pilha), as chamadas são armazenadas umas sobres as outras, sendo a linha que lançou uma exceção como a última.

Como Traceback funciona como uma Stack(Pilha), as chamadas são armazenadas umas sobres as outras, sendo a linha que lançou uma exceção como a última.

Para utilizarmos o Traceback, precisamos inicialmente importar seu módulo como abaixo:

Sintaxe
import traceback
Exemplo 2
import traceback

try:
    print(1/0)
except Exception as e:
    traceback.print_exc()
Saída
Traceback (most recent call last):
  File "/home/main.py", line 4, in 
    print(1/0)
ZeroDivisionError: division by zero

Para lançarmos uma exceção explicitamente em nossos programas em Python, utilizamos o comando raise seguindo de uma instância da exceção que desejamos lançar.

Sintaxe
raise classe_excecao(mensagem_erro)
Onde
mensagem_erro: mensagem de erro customizada para informação
Exemplo 2
import traceback

try:
    raise ZeroDivisionError("Ocorreu um erro")
except Exception as e:
    traceback.print_exc()
Saída
Traceback (most recent call last):
  File "/home/main.py", line 4, in 
    raise ZeroDivisionError("Ocorreu um erro")
ZeroDivisionError: Ocorreu um erro

No exemplo anterior, utilizamos o comando raise para lançar uma exceção explicitamente. Em alguns momentos, o tratamento da exceção não pode, por algum motivo, ser tratada em seu respectivo bloco catch como já visto antes.

Quando o que foi discutido acima ocorre, podemos relançar uma exceção para um escopo acima do atual utilizado o mesmo comando raise.

Sintaxe
raise nome_variavel_excecao 
Exemplo 3
def funcao():
    try:
        print(1/0)
    except Exception as e:
        raise e # relançando exception
try:
    funcao()
except ZeroDivisionError as e: #capturando exception relançada
    print(e)
Saída
division by zero

Caso uma nova exceção seja lançada ou invés de relançada, as informações do traceback referentes ao erro anterior serão perdidos.

A linguagem Python possuim várias execeções nativas. Abaixo uma lista das mais comuns que podem ser utilizadas:

Tab. 1: Exceções mais comuns
Nome Descrição
AssertionError Lançada quando há erro em um assert
AttributeError Lançada quando há erro ao atribuição ou referência
EOFError Lançada quando função input alcança a condição EOF
FloatingPointError Lançada quando há erro de ponto flutuante
GeneratorExit Lançada quando há erro
ImportError Lançada quando há erro ao importa módulo
IndexError Lançada quando um índice está fora do intervalo
KeyError Lançada quando uma chave não existe em um dicionário
KeyboardInterrupt Lançada quando Ctrl-C ou Delete é pressionado
MemoryError Lançada quando não há mais memória
NameError Lançada quando uma variável não é encontrada
NotImplementedError Lançada por métodos abstratos
OSError Lançada quando há erro S.O lança um erro
OverflowError Lançada quando há erro em operação aritmética
ReferenceError -
RuntimeError Lançada quando o erro não associada a nenhum outro erro
StopIteration Lançada quando o método next não retorna mais itens
SyntaxError Lançada quando há erro de sintaxe no código
IndentationError Lançada quando há erro na identação no código
TabError Lançada quando há erro em tabulação e espaços na identação
SystemError -
SystemExit -
TypeError -
UnboundLocalError -
UnicodeError -
UnicodeEncodeError -
UnicodeDecodeError -
UnicodeTranslateError -
ValueError Lançada quando há erro ao atribuir valor a uma argumento de tipo diferente
ZeroDivisionError Lançada quando há erro de divisão por zero
  1. 18/09/2024 - revisão 1 - Ajustes gramaticais; outros ajustes
  2. 19/02/2024 - versão inicial