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!
Latest posts by Breno RdV (see all)
- Estamos de mudança! - abril 28, 2024
- O que é Metaclass e como ela funciona. (#python #dev #metaclass) - janeiro 11, 2023
- Entenda a mágica dos Generators. (#python, #dev, #generator, #iterator) - dezembro 28, 2022