950 Stimmen

Wie man Ausnahmen richtig ignoriert

Wenn Sie nur ein try-except ohne Behandlung der Ausnahme tun wollen, wie tun Sie es in Python?

Ist die folgende Vorgehensweise die richtige?

try:
    shutil.rmtree(path)
except:
    pass

17 Stimmen

Seltsam, dass es bis jetzt niemand erwähnt hat (ich habe es in meiner Antwort getan), aber für diese spezielle Funktion können Sie einfach Folgendes tun shutil.rmtree(path, ignore_errors=True) . Dies gilt jedoch nicht für die meisten Funktionen.

11 Stimmen

Wichtig zu lesen, wenn man über das Ignorieren von Ausnahmen nachdenkt: Warum ist "except: pass" eine schlechte Programmierpraxis?

6 Stimmen

Stellen Sie sich vor, dies im wirklichen Leben zu tun. try: get_cash('$1000') except: pass # meh, es wird wahrscheinlich gut sein

1voto

miksus Punkte 396

Dies ist zwar kein Try-Except, aber dennoch eine weitere Möglichkeit, mit Ausnahmen umzugehen, wenn objektorientierte Programmierung Ihr Ding ist:

class MyExceptionHandler:

    def __enter__(self):
        ... # Do whatever when "with" block is started
        return self

    def __exit__(self, exc_type, exc_value, tb):
        return True

Und dann zum eigentlichen Code:

with MyExceptionHandler():
     ... # Code that may or may not raise an exception
     shutil.rmtree(path)

Wie funktioniert das?

  • __enter__ wird bei der Eingabe der with Block.
  • __exit__ wird beim Verlassen des Programms with Block
    • Dies sollte Folgendes ergeben True um die mögliche Ausnahme zum Schweigen zu bringen.
    • Dies sollte Folgendes ergeben None (oder etwas, das als falsch angesehen wird), um die potenzielle Ausnahme nicht zum Schweigen zu bringen.
    • Der Ausnahmetyp, die tatsächliche Ausnahme und ihr Traceback werden als (Positions-)Argumente übergeben. Mit diesen können Sie bestimmen, was zu tun ist.

Abschließend sei gesagt, dass Sie try-except bevorzugen. Dies kann nützlich sein, wenn Sie mehr Abstraktion als üblich benötigen.

0 Stimmen

Elegant, aber nicht auffällig, aber eigentlich cool

-5voto

Normalerweise tue ich das einfach:

try:
    doSomething()
except:
    _ = ""

9 Stimmen

Ich würde vorschlagen, dass Sie Folgendes ersetzen _ = "" con pass .

0 Stimmen

Und wenn Sie dieses Fragment in Code verwenden, der die Variable _ die vor diesem Block zugewiesen wurde, wenn eine Ausnahme auftritt, hat die Variable nach diesem Block einen anderen Wert.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X