Criando exceptions customizadas. (Python)

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

Simples

class CustomError(Exception):
    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:

try:
    raise CustomError("something went wrong!")
except CustomError as mce:
    print("CustomError", mce)
except Exception as e:
    print("Exception", e)
CustomError something went wrong!

 

 

Implementação 1

class MyCustomError(Exception):
    def __init__(self, *args, **kwargs):
        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:

try:
    raise MyCustomError("something went wrong!")
except MyCustomError as mce:
    print("MyCustomError", mce)
except Exception as e:
    print("Exception", e)
MyCustomError something went wrong!

 

 

Implementação 2

class MyCustomErrorWithStuff(Exception):
    def __init__(self, error_code, *args, **kwargs):
        super(MyCustomErrorWithStuff, self).__init__(*args, **kwargs)
        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:

try:
    raise MyCustomErrorWithStuff(33, "something went wrong!")
except MyCustomErrorWithStuff as mce:
    print("MyCustomErrorWithStuff", mce, mce.error_code)
except Exception as e:
    print("Exception", e)
MyCustomErrorWithStuff 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!

The following two tabs change content below.
Arquiteto de Software e Desenvolvedor Backend (quase Fullstack), geralmente trabalho com C#, PowerShell, Python, Golang, bash e Unity (esse é mais por hobby). Estou sempre buscando algo novo para aprender, adicionando novas ferramentas ao meu cinto de utilidades.
Posted in Dev, Python and tagged , , , , .