Solution - presque aucun codage nécessaire
- Juste d'hériter de votre classe d'exception à partir de
Exception
- et de passer le message que le premier paramètre du constructeur
Exemple:
class MyException(Exception):
"""My documentation"""
try:
raise MyException('my detailed description')
except MyException as my:
print my # outputs 'my detailed description'
Vous pouvez utiliser str(my)
ou (moins élégant) my.args[0]
pour accéder au message personnalisé.
Arrière-plan
Dans les nouvelles versions de Python (2,6) nous sommes censés hériter de nos classes d'exception de l'Exception, qui (à partir de Python 2.5) hérite de BaseException. L'arrière-plan est décrit en détail dans PEP352.
class BaseException(object):
"""Superclass representing the base of the exception hierarchy.
Provides an 'args' attribute that contains all arguments passed
to the constructor. Suggested practice, though, is that only a
single string argument be passed to the constructor."""
__str__
et __repr__
sont déjà mis en œuvre de façon significative,
surtout pour le cas de seulement un arg (qui peut être utilisée comme message).
Vous n'avez pas besoin de répéter __str__
ou __init__
de la mise en œuvre ou créez - _get_message
comme suggéré par d'autres.