Eine Drittanbieter-Bibliothek (in C geschrieben), die ich in meinem Python-Code verwende, gibt Warnungen aus. Ich möchte in der Lage sein, die try
except
Syntax zu verwenden, um diese Warnungen richtig zu behandeln. Gibt es eine Möglichkeit, dies zu tun?
python
exception
exception-handling
warnings
Boris Gorelik
quelle
quelle
warnings.filterwarnings
macht genau das, was du willst, ich verstehe nicht, was dein Problem damit ist?warnings.filterwarnigns('error')
macht den Job. Ich kann die ursprüngliche Antwort, die diese Lösung vorschlug, nicht findenAntworten:
Um aus dem Python-Handbuch ( 27.6.4. Testen von Warnungen ) zu zitieren :
quelle
try
except
Syntax verwenden.fnx
Sie das Ergebnis behalten (und die Warnung trotzdem verwalten können) , wenn Sie etwas zurückgeben.fxn()
keine Warnung zurückgegebenw
wird, eine leere Liste angezeigt wird. Wennw
es sich um eine leere Liste handelt[]
, wird beim Ausführen des Codes der folgende Fehler angezeigt :IndexError: list index out of range
. Wenn Sie nur die Eigenschaften der erfassten Warnungen formatieren oder überprüfen möchten, ist es besser, eine for-Schleife zu verwenden:for x in w: print(f'{x.category.__name__}: {str(x.message)}')
Um Warnungen als Fehler zu behandeln, verwenden Sie einfach Folgendes:
Danach können Sie Warnungen wie Fehler abfangen, z. B. funktioniert dies:
PS Diese Antwort wurde hinzugefügt, da die beste Antwort in Kommentaren Rechtschreibfehler enthält:
filterwarnigns
stattfilterwarnings
.quelle
filterwarnings
Aufruf nicht, um ihn abzufangenWarnings
, zumindest in Python 3. Es funktioniert einfach.Wenn Sie nur möchten, dass Ihr Skript bei Warnungen fehlschlägt, können Sie Folgendes verwenden:
quelle
Hier ist eine Variante, die klarer macht, wie Sie nur mit Ihren benutzerdefinierten Warnungen arbeiten.
quelle
In einigen Fällen müssen Sie ctypes verwenden, um Warnungen in Fehler umzuwandeln. Beispielsweise:
quelle
warnings.simplefilter('error')
Sie bei fast jedem großen Softwareprojekt nicht den Traceback für die Warnung, die Sie in den Protokollen gesehen haben, sondern Tracebacks von zuvor gefilterten Warnungen. Die Verwendungsimplefilter
ist auch der schnellste Weg, um zu Ihrer Antwort zu gelangen, wenn Sie einen CLI-Aufruf haben.