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