Lösung:
Lösung - fast keine Codierung erforderlich
Erben Sie einfach Ihre Ausnahmeklasse von Exception
und übergeben Sie die Nachricht als ersten Parameter an den Konstruktor
Beispiel:
class MyException(Exception):
"""My documentation"""
try:
raise MyException('my detailed description')
except MyException as my:
print my # outputs 'my detailed description'
Sie können verwenden str(my)
oder (weniger elegant) my.args[0]
um auf die benutzerdefinierte Nachricht zuzugreifen.
Hintergrund
In den neueren Versionen von Python (ab 2.6) sollen wir unsere benutzerdefinierten Ausnahmeklassen von Exception erben, die (ab Python 2.5) von BaseException erbt. Der Hintergrund ist ausführlich in PEP 352 beschrieben.
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__
und __repr__
sind bereits sinnvoll implementiert, insbesondere für den Fall von nur einem arg (das als Nachricht verwendet werden kann).
Sie müssen nicht wiederholen __str__
oder __init__
implementieren oder erstellen _get_message
wie von anderen vorgeschlagen.
Ja, es ist in Python 2.6 veraltet, weil es in Python 3.0 wegfällt
Die BaseException-Klasse bietet keine Möglichkeit mehr, Fehlermeldungen zu speichern. Sie müssen es selbst umsetzen. Sie können dies mit einer Unterklasse tun, die eine Eigenschaft zum Speichern der Nachricht verwendet.
class MyException(Exception):
def _get_message(self):
return self._message
def _set_message(self, message):
self._message = message
message = property(_get_message, _set_message)
Hoffe das hilft
class MyException(Exception):
def __str__(self):
return repr(self.args[0])
e = MyException('asdf')
print e
Dies ist Ihre Klasse im Python2.6-Stil. Die neue Ausnahme akzeptiert eine beliebige Anzahl von Argumenten.