Warnings in Exceptions umwandeln?

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
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Dienstag 19. September 2006, 17:16

Hoi,

ich möchte gerne Warnings eines externen Moduls als Exceptions behandeln, soll heißen, daß jede Warning zum Abbruch des Programms führen soll oder per try / except abgefangen werden kann.
Irgendwie schaffe ich es zwar sämtliche Warnings gänzlich zu unterdrücken, aber das ist ja nicht was ich wünsche. Kann mir jemand in einem Snippet zeigen wie das geht (natürlich ohne das externe Modul zu modifizieren)?

Gruß,
Christian
BlackJack

Dienstag 19. September 2006, 17:49

Das hier noch nicht gefunden

/usr/share/doc/python2.4/html/lib/warning-filter.html

oder Probleme mit der Verwendung?

PS: python.org ist gerade nicht erreichbar, sonst hätte ich die Doku dort verlinkt.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Dienstag 19. September 2006, 18:00

"Nur" ein Problem mit der Verwendung. (Irgendwie muß ich bald mal lernen klar rüber zu kommen :oops:)

So weit klar:

Code: Alles auswählen

>>> import warnings
>>> def f():
...    warnings.warn('etst')
...
>>> f()
/etc/pythonstart:2: UserWarning: etst
  # enabling name completion
Wenn ich jetzt aber

Code: Alles auswählen

warnings.filterwarnings('error',category=Warning)
versuche, ergibt der Aufruf von f keine Exception, sondern gar nichts mehr.

Meine Frage ist vielleicht etwas anfängermäßig, aber ich stehe wirklich auf dem Schlauch. Vielleicht magst Du mich in der richtigen Richtung runterschubsen?

Danke,
Christian

PS python.org wird wahrscheinlich z. Zt. völlig überlastet sein, wegen all der Downloads von 2.5. Ich habe es auch schon probiert und werde wohl bis morgen warten ...
BlackJack

Dienstag 19. September 2006, 21:12

Die richtige Richtung ist wohl das jeder weitere Aufruf von `f()` keine Wirkung mehr hat weil jede Warnung normalerweise nur einmal ausgegeben wird.

Also entweder `f()` vorher nicht Aufrufen oder das (globale) Dictionary `__warningregistry__` leeren.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Mittwoch 20. September 2006, 09:30

Danke Dir - ich stand wirklich auf dem Schlauch. Habe ich den richtigen Code, bloß in der falschen Reihenfolge ausgeführt ... Grr.

Christian
Antworten