Skip to content

BaseException.message in Python 2.6 veraltet

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.

Click to rate this post!
[Total: 0 Average: 0]



Anderer Beitrag

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.