Raise Exception
Ao desenvolvermos códigos em Python, frequentemente nos deparamos com situações em que é necessário sinalizar que alguma coisa de errado ocorreu. Imagine que você tem um site que converte arquivos de imagens ou áudios. Para que seu serviço funcione bem, é essencial garantir que os uploads recebidos tenham os formatos corretos. Uma abordagem comum para lidar com esses casos é abrir uma exceção (raise exception). Essa é uma forma explicita de notificar um usuário de que ocorreu um erro.
Exceção (Exception) em Python
Em Python, gerar uma exceção (raise exception) é uma forma controlada de interromper o fluxo normal de um código e tomar as medidas apropriadas com base no erro. Exceções internas são incorporações nativas do Python. Você pode usá-las diretamente em seu código sem importar nada. Na verdade, todos nós que programamos em Python estamos acostumados a vê-las. O Python conta com várias exceções internas que indicam qual erro ocorreu. Veja algumas delas abaixo.
"""
exemplo de exceção em Python:
NameError - aparece quando um nome global ou local não está definido
"""
x = 1
print(y + x) # y não foi definido
# resultado: NameError: name 'y' is not defined
"""
exemplo de exceção em Python:
IndexError - ocorre quando uma operação de indexação em
uma sequência usa um índice fora do intervalo
"""
minha_lista = [1, 2, 3, 4, 5]
print(minha_lista[10]) # índice não existe
# resultado: IndexError: list index out of range
"""
exemplo de exceção em Python:
ModuleNotFoundError - acontece quando a importação não consegue
localizar um determinado módulo
"""
from PIL import mage
# resultado: ImportError: cannot import name 'mage' from 'PIL'
"""
exemplo de exceção em Python:
KeyError - ocorre quando uma chave está ausente em um dicionário
"""
meu_dic = {
'a': 1,
'b': 2,
'c': 3
}
print(meu_dic['d'])
# resultado: KeyError: 'd
Exceções Personalizadas
Além de contar com as exceções internas do Python, também podemos criar novas exceções personalizadas para casos particulares. As exceções personalizadas são aquelas que você cria quando nenhuma exceção interna atende às suas necessidades. Normalmente, elas são restritas a um módulo dedicado para um projeto específico. Elas são particularmente importantes em situações em que precisamos deixar muito claro que uma ação deve ser entendida como um erro em um programa. Esse tipo de caso é frequente em desenvolvimento web.
Para usar uma exceção personalizada, é preciso criar uma classe que herda da classe Exception.
class MeuErroPersonalizado(Exception):
"""
Um erro personalizado para meu programa
"""
# Construtor opcional (init) para armazenar detalhes de erro, se necessário
def __init__(self, message):
self.message = message
super().__init__(message)
Exceções personalizadas são comumente definidas apenas com uma instrução pass no corpo da classe Exception (sem o construtor opcional mostrado acima). Isso ocorre porque o nome da classe é geralmente o aspecto mais importante de uma exceção personalizada. No entanto, no exemplo acima, ela foi definida com uma mensagem para explicar o erro.
Para usar uma exceção personalizada, basta inserir a palavra-chave raise (linha 3 abaixo) no local do código onde você acha que ela pode ocorrer. No exemplo abaixo, usamos raise dentro de uma função.
def verifica_valor(valor):
if valor < 10:
raise MeuErroPersonalizado("O valor precisa ser menor do que 10.")
Idealmente, exceções personalizadas devem ser utilizadas com instruções try/except ou try/except/finally. Veja nosso exemplo:
# Chame a função onde a exceção pode ocorrer preferencialmente com um bloco try/except
try:
verifica_valor(1)
except MeuErroPersonalizado as e:
print(f"MeuErroPersonalizado: {e.message}") # Accessa o erro
# resultado: MeuErroPersonalizado: O valor precisa ser menor do que 10.
Veja também:
Encontrou algum erro ou quer fazer uma sugestão? Por favor, entre em contato usando nosso formulário de contatos.