Ich habe eine Liste von Funktionen, die möglicherweise fehlschlagen, und wenn eine fehlschlägt, möchte ich nicht das Skript zu stoppen, sondern mit der nächsten Funktion fortfahren.Wie kann man in diesem Fall eine "zu breite Ausnahme" verhindern?
Ich Ausführung es mit etwas wie folgt aus:
list_of_functions = [f_a,f_b,f_c]
for current_function in list_of_functions:
try:
current_function()
except Exception:
print(traceback.format_exc())
Es funktioniert gut, aber es ist nicht PEP8 konform:
Wenn Ausnahmen fangen, erwähnen bestimmte Ausnahmen, wenn möglich anstelle der Verwendung eine bloße Ausnahme: Klausel.
Zum Beispiel verwenden:
try: import platform_specific_module except ImportError: platform_specific_module = None
Ein nackte Ausnahme: Klausel Systemexit und KeyboardInterrupt Ausnahmen abfangen, so dass es schwieriger, ein Programm mit Strg-C zu unterbrechen, und andere Probleme verschleiern kann. Wenn Sie alle Ausnahmen abfangen wollen, die Programmfehler signalisieren, verwenden Sie außer Ausnahme: (blank außer entspricht außer BaseException:).
Eine gute Daumenregel ist die Verwendung von bloßen ‚mit Ausnahme von‘ Klauseln zwei Fälle zu beschränken:
Wenn der Ausnahmebehandler der Zurückverfolgungs seines Ausdrucken oder Anmeldung; zumindest wird dem Benutzer bekannt sein, dass ein Fehler aufgetreten ist.
Wenn der Code einige Aufräumarbeiten durchführen muss, lässt er die Ausnahme jedoch mit Raise nach oben propagieren. versuchen Sie ... schließlich kann eine bessere Weise sein, diesen Fall zu behandeln.
Wie ist dies der gute Weg?
Ich verstehe nicht, was du verlangst. Welche Arten von Ausnahmen wollen * Sie * handhaben? – BrenBarn
Welche Ausnahmen könnten von Ihrer Funktion ausgelöst werden? – haifzhan
'except Ausnahme:' ist anders als blank 'außer: '. Dieser Abschnitt von PEP8 warnt vor letzterem, Sie machen das erstere. – roippi