Was ist der richtige Weg, um benutzerdefinierte Ausnahmeklassen in modernem Python zu deklarieren? Mein primäres Ziel ist es, zu folgen, was auch immer Standard andere Ausnahmeklassen haben, so dass (zum Beispiel) jede zusätzliche Zeichenfolge, die ich in der Ausnahme enthalten ist, von was auch immer Werkzeug die Ausnahme gefangen gedruckt.
Unter "modernem Python" verstehe ich etwas, das in Python 2.5 läuft, aber für Python 2.6 und Python 3.* "korrekt" ist. Und mit "benutzerdefiniert" meine ich eine Exception
Objekt, das zusätzliche Daten über die Ursache des Fehlers enthalten kann: eine Zeichenkette, vielleicht auch ein anderes beliebiges Objekt, das für die Ausnahme relevant ist.
Ich wurde durch die folgende Verwerfungswarnung in Python 2.6.2 gestolpert:
>>> class MyError(Exception):
... def __init__(self, message):
... self.message = message
...
>>> MyError("foo")
_sandbox.py:3: DeprecationWarning: BaseException.message has been deprecated as of Python 2.6
Es scheint verrückt, dass BaseException
hat eine besondere Bedeutung für Attribute mit dem Namen message
. Ich entnehme PEP-352 dieses Attribut hatte in 2.5 eine besondere Bedeutung, die jetzt abgeschafft werden soll, also ist dieser Name (und nur dieser) jetzt wohl verboten? Pfui.
Ich bin mir auch unscharf bewusst, dass Exception
hat einen magischen Parameter args
aber ich habe nie gewusst, wie man es benutzt. Ich bin mir auch nicht sicher, ob es der richtige Weg ist, die Dinge in Zukunft zu tun; viele der Diskussionen, die ich online gefunden habe, deuten darauf hin, dass sie versuchen, args in Python 3 abzuschaffen.
Update: zwei Antworten haben vorgeschlagen, die __init__
y __str__
/ __unicode__
/ __repr__
. Das scheint eine Menge Tipparbeit zu sein, ist das notwendig?