579 Stimmen

Python: Wie ignoriert man eine Ausnahme und fährt fort?

Ich habe einen try...except-Block in meinem Code und wenn eine Ausnahme geworfen wird. Ich möchte eigentlich nur mit dem Code fortfahren, weil in diesem Fall alles noch gut läuft. Das Problem ist, wenn man den except: Block leer oder mit einem #do nothing lässt, bekommt man einen Syntaxfehler. Ich kann continue nicht verwenden, weil es nicht in einer Schleife steht. Gibt es ein Schlüsselwort, das ich verwenden kann, das dem Code sagt, dass er einfach weiterlaufen soll?

853voto

Andy Hume Punkte 38284

348voto

tzot Punkte 86792

Allgemeine Antwort

Das Standard-"nop" in Python ist die pass Erklärung:

try:
    do_something()
except Exception:
    pass

使用方法 except Exception anstelle einer bloßen except das Abfangen von Ausnahmen wie SystemExit , KeyboardInterrupt usw.

Python 2

Da in Python 2 die zuletzt ausgelöste Exception gespeichert wird, werden einige der Objekte, die an der Anweisung zum Auslösen der Exception beteiligt sind, auf unbestimmte Zeit am Leben gehalten (eigentlich bis zur nächsten Exception). Falls dies für Sie wichtig ist und Sie sich (normalerweise) nicht an die letzte geworfene Exception erinnern müssen, können Sie stattdessen folgendes tun pass :

try:
    do_something()
except Exception:
    sys.exc_clear()

Dies löscht die zuletzt ausgelöste Ausnahme.

Python 3

In Python 3 wird die Variable, die die Ausnahmeinstanz enthält gelöscht beim Verlassen des except blockieren. Selbst wenn die Variable vorher einen Wert hatte, wird sie nach Eingabe und Verlassen des except Block wird es undefiniert wieder.

308voto

Jack O'Connor Punkte 8734

In Python 3.4 gibt es eine neue Möglichkeit, dies zu tun:

from contextlib import suppress

with suppress(Exception):
  # your code

Hier ist der Commit, der es hinzugefügt hat: http://hg.python.org/cpython/rev/406b47c64480

Und hier ist der Autor, Raymond Hettinger, der darüber und über alle möglichen anderen Python-Themen spricht (relevanter Teil bei 43:30): http://www.youtube.com/watch?v=OSGv2VnC0go

Wenn Sie das nackte Leben nachahmen wollten except Schlüsselwort und ignorieren auch Dinge wie KeyboardInterrupt -auch wenn Sie das normalerweise nicht tun- könnten Sie verwenden with suppress(BaseException) .

Edit: Sieht aus wie ignored wurde umbenannt in suppress vor der Veröffentlichung von 3.4.

29voto

ryeguy Punkte 62987

Versuchen Sie dies:

try:
    blah()
except:
    pass

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