err.message -> Python 2.6 - DeprecationWarning

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Code: Alles auswählen

try:
    raise AttributeError("Foo")
except AttributeError, err:
    print "1:", str(err)
    print "----"
    print "2:", err.message
Ausgabe:

Code: Alles auswählen

1: Foo
----
2:test.py:7: DeprecationWarning: BaseException.message has been deprecated as of Python 2.6
  print "2:", err.message
 Foo
Wegen der Änderung: http://www.python.org/dev/peps/pep-0352/ kommt er beim zugriff auf err.message zu dieser DeprecationWarning

Soll ich also zukünftig mit str(err) arbeiten???

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Wo wir gerade beim Thema sind.
Was tun wenn eine Exception mit Unicode gefüttert wurde?

Code: Alles auswählen

In [31]: try: raise Exception(u"müll")
   ....: except Exception, e: s = str(e)
   ....:
<type 'exceptions.UnicodeEncodeError'>: 'ascii' codec can't encode character u'\xfc' in position 1: ordinal not in range
(128)
Welche Informationen sind aus .args zugesichert?

Code: Alles auswählen

In [32]: try: raise Exception(u"müll")
   ....: except Exception, e: s = " ".join(e.args)
   ....:

In [33]: s
Out[33]: u'm\xfcll'
Das Modul Socket füllt die args auch wieder anders:

Code: Alles auswählen

In [39]: try: socket.socket(101010)
   ....: except Exception, e: pass
   ....:

In [40]: e.args
Out[40]: (10047, 'Address family not supported')
Am besten klappt's IMHO mit traceback.format_exc()
Obwohl auch da unicode Objekte mit non-ascii chars als <not printable > ausgegeben werden. Aber es gibt zumindest keine neue Exception bei der Behandlung ;)
lunar

Encoding-Fehler vermeidet man, wenn "unicode" anstelle von "str" nutzt, und bei der Ausgabe des Fehlers korrekt enkodiert.

Der Inhalt des "args"-Attributs ist abhängig vom Typ der Ausnahme. Von EnvironmentError abgeleitete Ausnahmen haben in der Regel sogar drei Elemente in ".args". Daher sollte man auch "unicode()" nutzen, um die Fehlermeldung zu erzeugen.
Antworten