Python Tutorial - Tratamento de Exceções
Você aprenderá como lidar com as exceções Python nesta seção. Além disso, você aprenderá a levantar e pegar exceções.
Quando uma exceção ocorre em um programa, a execução do programa é encerrada. Mas na maioria das vezes, você não prefere a terminação anormal do programa, portanto você poderia usar o manuseio de exceções Python para evitar o crash do seu programa.
try...except
No exemplo a seguir, o usuário é solicitado a inserir 10 números inteiros. Se o usuário entrar outro tipo em vez de inteiros, uma exceção será lançada e instruções no bloco except
serão executadas:
>>> n = 10
>>> i = 1
>>> sum = 0
>>> while i <= n:
try:
num = int(input('Enter a number: '))
sum = sum + num
i = i+1
except:
print('Please enter an integer!!')
break
Enter a number: 23
Enter a number: 12
Enter a number: Asd
Please enter an integer!!
>>> print('Sum of numbers =', sum)
Sum of numbers = 35
Você também pode pegar exceções especificadas, por exemplo, se a divisão por zero acontecer, você pode pegar a exceção correspondente como:
try:
# statements
except ZeroDivisionError:
# exception handling
except:
# all other exceptions are handled here
raise
Exceção
Você pode forçar a ocorrência de uma exceção específica utilizando a palavra-chave raise
:
>>> raise ZeroDivisionError
Traceback (most recent call last):
File "<pyshell#17>", line 1, in <module>
raise ZeroDivisionError
ZeroDivisionError
>>> raise ValueError
Traceback (most recent call last):
File "<pyshell#18>", line 1, in <module>
raise ValueError
ValueError
Se você precisar adicionar alguma informação personalizada à exceção auto-elevada, você pode adicioná-la no parêntese após o tipo de erro de exceção.
>>> raise NameError("This is a customized exception")
Traceback (most recent call last):
File "<pyshell#18>", line 1, in <module>
raise NameError("This is a customized exception")
NameError: This is a customized exception
try...finally
O bloco finally
é opcional no bloco try
. Se houver um bloco finally
, ele será executado em qualquer caso.
Isto é demonstrado no exemplo abaixo:
>>> try:
raise ValueError
finally:
print('You are in finally block')
You are in finally block
Traceback (most recent call last):
File "<pyshell#23>", line 2, in <module>
raise ValueError
ValueError
O bloco try...finally
é utilizado para as ações de limpeza, como quando se trabalha com um arquivo, é uma boa prática fechar o arquivo. Então o arquivo será fechado no bloco finally
.
Exceções Incorporadas em Python
Nesta seção, você aprenderá sobre as exceções padrão na programação Python.
As exceções são os erros de tempo de execução que são levantados durante a interpretação. Por exemplo, a divisão de qualquer número por zero irá criar um erro de tempo de execução chamado ZeroDivisionError
.
Em Python, existem algumas exceções embutidas que são descritas abaixo:
Exceção | Quando é criado? |
---|---|
AssertionError |
quando a declaração de “afirmar” falhar |
AttributeError |
quando a referência ao atributo falhar |
EOFError |
quando nenhum dado é lido pelas funções input() e o fim do arquivo é alcançado. |
FloatingPointError |
quando o cálculo do ponto flutuante falhar |
GeneratorExit |
Quando um coroutine ou um gerador é fechado, ocorre a exceção GeneratorExit . |
ImportError |
quando a “importação” não consegue encontrar o módulo |
ModuleNotFoundError |
quando o módulo não é encontrado por import . Esta exceção é uma subclasse de ImportError . |
IndexError |
quando o índice de uma sequência não está no intervalo. |
KeyError |
quando uma chave de dicionário não é encontrada no dicionário |
KeyboardInterrupt |
quando uma tecla de interrupção é pressionada. |
MemoryError |
quando há menos memória para uma operação específica |
NameError |
quando uma variável não é encontrada |
NotImplementedError |
quando a implementação do método abstrato é necessária, mas não fornecida. |
OSError |
quando um erro de sistema é encontrado |
OverFlowError |
quando um valor é demasiado grande para ser representado. |
RecursionError |
quando o limite de recorrência excede o número máximo |
IndentationError |
quando a recuo é devidamente especificado para a definição de qualquer função, classe, etc. |
SystemError |
quando é encontrado um erro relacionado com o sistema |
SystemExit |
quando sys.exit() é utilizado para sair intérprete. |
TypeError |
quando uma operação é inválida para o tipo de dados especificado |
ValueError |
quando uma função incorporada tem argumentos válidos, mas os valores fornecidos não são válidos. |
RunTimeError |
quando o erro gerado não se enquadra em nenhuma outra categoria |
IOError |
quando uma operação de E/S falhou. |
UnBoundLocalError |
quando a variável local é acessada mas não tem valor |
SyntaxError |
quando há um erro de sintaxe |
TabError |
quando há indentação desnecessária da aba |
UnicodeError |
quando um erro relacionado com Unicode é encontrado |
UnicodeEncodeError |
quando um erro relacionado com Unicode é encontrado por causa da codificação |
UnicodeDecodeError |
quando um erro relacionado com Unicode é encontrado por causa da descodificação |
UnicodeTranslateError |
quando um erro relacionado com Unicode é encontrado por causa da tradução de |
ZeroDivisionError |
quando um número é dividido por zero |
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook