Objetivos
Exception
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.
Recuperando informações de uma exception
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 |
Histórico de atualizações
- 18/09/2024 - revisão 1 - Ajustes gramaticais; outros ajustes
- 19/02/2024 - versão inicial
Os cursos oferecidos nesta página são cursos fornecidos por parceiros. Ao comprar um curso clicando
em seu banner, você está ajudando a manter o projeto TutorialDev vivo. Os sites dos cursos parceiros utilizam cookies.