Tratamento de Exceções em Python
Em computação e programação de computadores, o tratamento de exceções é o processo de responder à ocorrência de exceções – condições anômalas ou excepcionais que requerem processamento especial.
Python tem muitas exceções embutidas que são levantadas quando um programa encontra um erro, e a maioria das bibliotecas externas, como a popular Requests, inclui suas próprias exceções personalizadas com as quais precisaremos lidar.
Tratamento básico de exceções
Você não pode dividir por zero, isso é uma verdade matemática, e se você tentar fazer isso em Python, o interpretador levantará a exceção embutida ZeroDivisionError:
def divide(dividend , divisor):
print(dividend / divisor)
divide(dividend=10, divisor=5)
2
divide(dividend=10, divisor=0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero
Digamos que não queremos que nosso programa pare sua execução ou mostre ao usuário uma saída que ele não entenderá. Se quisermos imprimir uma mensagem útil e clara, então precisamos tratar a exceção com as palavras-chave try e except:
# try-except: trata exceções graciosamente
def divide(dividend , divisor):
try: # Tenta executar este código
print(dividend / divisor)
except ZeroDivisionError: # Captura o tipo de exceção específico
print('Você não pode dividir por 0')
divide(dividend=10, divisor=5)
2
divide(dividend=10, divisor=0)
Você não pode dividir por 0
Faça login para responder este quiz e acompanhar seu progresso de aprendizagem
try e exceptcatch e handleerror e rescueif e elseTratamento de Múltiplas exceções usando um bloco de exceção
Você também pode tratar múltiplas exceções em uma única linha como a seguinte, sem a necessidade de criar múltiplos blocos de exceção.
# Trata múltiplas exceções em um único bloco except
def divide(dividend , divisor):
try:
if (dividend == 10):
var = 'str' + 1 # Isso levantará TypeError
else:
print(dividend / divisor)
except (ZeroDivisionError, TypeError) as error: # Captura múltiplos tipos de exceção
print(error) # Imprime a mensagem de erro
divide(dividend=20, divisor=5)
4
divide(dividend=10, divisor=5)
can only concatenate str (not "int") to str
divide(dividend=10, divisor=0)
division by zero
Faça login para responder este quiz e acompanhar seu progresso de aprendizagem
except?except separados para cada tipo de exceçãoexcept (Exception1, Exception2)Código Finally no tratamento de exceções
O código dentro da seção finally é sempre executado, independentemente de uma exceção ter sido levantada ou não:
# Bloco finally: sempre executa independentemente de exceções
def divide(dividend , divisor):
try:
print(dividend / divisor)
except ZeroDivisionError:
print('Você não pode dividir por 0')
finally: # Sempre executa, mesmo se a exceção ocorrer
print('Execução finalizada')
divide(dividend=10, divisor=5)
2.0
Execução finalizada
divide(dividend=10, divisor=0)
Você não pode dividir por 0
Execução finalizada
Faça login para responder este quiz e acompanhar seu progresso de aprendizagem
finally é executado?Exceções Personalizadas
Exceções personalizadas são inicializadas criando uma class que herda da classe base Exception do Python, e são levantadas usando a palavra-chave raise:
# Exceção personalizada: criada herdando da classe Exception
class MyCustomException(Exception):
pass
raise MyCustomException # Levanta a exceção personalizada
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
__main__.MyCustomException
Para declarar uma mensagem de exceção personalizada, você pode passá-la como um parâmetro:
class MyCustomException(Exception):
pass
raise MyCustomException('Uma mensagem personalizada para minha exceção personalizada')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
__main__.MyCustomException: Uma mensagem personalizada para minha exceção personalizada
Tratar uma exceção personalizada é o mesmo que qualquer outra:
try:
raise MyCustomException('Uma mensagem personalizada para minha exceção personalizada')
except MyCustomException:
print('Minha exceção personalizada foi levantada')
Minha exceção personalizada foi levantada
Faça login para responder este quiz e acompanhar seu progresso de aprendizagem
Exception@exceptionException.create()