Python Tutorial - Tratamento de Exceções

Jinku Hu 30 janeiro 2023
  1. try...except
  2. raise Exceção
  3. try...finally
  4. Exceções Incorporadas em Python
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
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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