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?
- Wie man Ausnahmen richtig ignoriert (12 Antworten )
Antworten
Zu viele Anzeigen?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.
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.