Quando você está trabalhando em um projeto Python, pode se deparar com situações em que as exceções integradas não capturam exatamente os erros específicos com os quais você está lidando. Nesses casos, criar exceções personalizadas pode ser incrivelmente útil. Mas qual é a maneira correta de declarar exceções personalizadas no Python moderno? Vamos explorar as melhores práticas para definir suas próprias classes de exceção.
Criando Exceções Personalizadas Básicas
A forma mais simples de uma exceção personalizada é apenas uma classe que herda da classe Exception
integrada do Python. Veja como você pode criar uma:
class MinhaExcecao(Exception):
"""Levantada para o meu tipo específico de exceção"""
Esta é a forma mais básica de uma exceção personalizada. É uma boa prática incluir um docstring para explicar quando essa exceção deve ser levantada.
Adicionando Informações Adicionais às Exceções
Às vezes, você pode querer incluir mais informações sobre o erro. Você pode fazer isso sobrescrevendo o método __init__
da sua classe de exceção personalizada. Aqui está um exemplo:
class ErroDeValidacao(Exception):
def __init__(self, mensagem, erros):
super().__init__(mensagem)
self.erros = erros
Neste exemplo, ErroDeValidacao
recebe um parâmetro adicional erros
, que poderia ser um dicionário de mensagens de erro. Isso permite que você passe e acesse informações adicionais sobre o erro.
Evitando Recursos Obsoletos
Em versões mais antigas do Python, as exceções tinham um atributo message
que foi descontinuado. Para evitar avisos, você não deve usar esse atributo diretamente. Em vez disso, passe sua mensagem para o construtor da classe base, como mostrado no exemplo de ErroDeValidacao
acima.
Acessando Detalhes da Exceção
Quando você levanta uma exceção, pode passar uma mensagem ou até mesmo um dicionário como argumento. Veja como você pode levantar e capturar uma exceção desse tipo:
try:
raise MinhaExcecao("Meu aerodeslizador está cheio de enguias")
except MinhaExcecao as e:
print(e)
Se você passou um dicionário, você poderia acessá-lo assim:
try:
raise MinhaExcecao({"mensagem": "Meu aerodeslizador está cheio de animais", "animal": "enguias"})
except MinhaExcecao as e:
detalhes = e.args[0]
print(detalhes["animal"])
Subclassificando Exceções Específicas
Se a sua exceção personalizada é um tipo específico de uma exceção existente, você deve subclassificar essa exceção específica em vez da genérica Exception
. Isso fornece mais contexto e pode tornar o tratamento de erros mais preciso.
class MyAppValueError(ValueError):
"""Levantada quando um subconjunto específico de valores no contexto do aplicativo está errado"""
def __init__(self, mensagem, foo, *args):
self.mensagem = mensagem
self.foo = foo
super().__init__(mensagem, foo, *args)
Resumo
No Python moderno, declarar exceções personalizadas é direto. Comece subclassificando a classe Exception
integrada ou uma exceção mais específica, se aplicável. Forneça um docstring para explicar o propósito da sua exceção personalizada. Sobrescreva o método __init__
se você precisar passar informações adicionais, mas evite usar recursos obsoletos como o atributo message
. Seguindo essas diretrizes, você criará exceções personalizadas que são claras, informativas e fáceis de usar em seus projetos Python.
Cursos de programação gratuitos com certificado
Aprenda a programar e desenvolva soluções para o seu trabalho com Python para alcançar novas oportunidades profissionais. Aqui na Asimov você encontra:
- Conteúdos gratuitos
- Projetos práticos
- Certificados
- +20 mil alunos e comunidade exclusiva
- Materiais didáticos e download de código
Comentários