Criando exceptions customizadas. (Python)

Criando exceptions customizadas. (Python)

Overview

Você já precisou de uma exception personalizada em Python e não soube por onde começar? Este post é para você! Vamos explorar, de maneira leve e descomplicada, como criar suas próprias classes de exceção, adicionando um toque de personalização aos seus projetos de programação. Acompanhe exemplos fáceis de seguir que tornarão suas exceptions mais flexíveis e funcionais!

Criar uma classe herdando de Exception é bem simples. Neste post, vou mostrar algumas formas de se fazer isso.

Simples

1class CustomError(Exception):
2    pass

Com a implementação acima, você pode pode fazer sua exception herdar de qualquer outra classe de erro, mas deixa a desejar no quesito flexibilidade.

Exemplo:

1try:
2    raise CustomError("something went wrong!")
3except CustomError as mce:
4    print("CustomError", mce)
5except Exception as e:
6    print("Exception", e)
1CustomError something went wrong!

Implementação 1

1class MyCustomError(Exception):
2    def __init__(self, *args, **kwargs):
3        super(MyCustomError, self).__init__(*args, **kwargs)

A classe acima segue o mesmo principio: você pode substituir Exception por qualquer outra classe de erro e utilizar os args ou kwargs para passar alguma informação customizada.

Exemplo:

1try:
2    raise MyCustomError("something went wrong!")
3except MyCustomError as mce:
4    print("MyCustomError", mce)
5except Exception as e:
6    print("Exception", e)
1MyCustomError something went wrong!

Implementação 2

1class MyCustomErrorWithStuff(Exception):
2    def __init__(self, error_code, *args, **kwargs):
3        super(MyCustomErrorWithStuff, self).__init__(*args, **kwargs)
4        self.error_code = error_code

A diferença entre esta implementação e a anterior é que esta possui uma propriedade nova (error_code). Incluí ela para demonstrar que é possível adicionar propriedades a sua classe de erro sem quebrar nada.

Exemplo:

1try:
2    raise MyCustomErrorWithStuff(33, "something went wrong!")
3except MyCustomErrorWithStuff as mce:
4    print("MyCustomErrorWithStuff", mce, mce.error_code)
5except Exception as e:
6    print("Exception", e)
1MyCustomErrorWithStuff something went wrong! 33

Obviamente, esta não é a única forma de se implementar exceptions personalizadas, mas é uma forma bem flexível.

Espero ter ajudado!