Wie ignoriere ich Exceptions?
Wenn Sie nur wollen, zu tun versuchen-mit Ausnahme ohne Behandlung die Ausnahme, wie macht man das in Python?
Ist die nach dem richtigen Weg, es zu tun?
try:
shutil.rmtree(path)
except:
pass
Kommentar zu dem Problem
Seltsam, dass niemand erwähnt bis jetzt (ich habe in meiner Antwort), aber für diese spezielle Funktion, können Sie nur
shutil.rmtree(path, ignore_errors=True)
. Dies nicht gelten für die meisten Funktionen, jedoch. Wichtig Lesen, wenn denken, zu ignorieren, Ausnahmen: Warum ist "except: pass" ein schlechter Programmierstil?
InformationsquelleAutor der Frage Joan Venge | 2009-04-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
oder
Der Unterschied ist, dass das erste fangen auch
KeyboardInterrupt
,SystemExit
und so ein Zeug, die sind direkt abgeleitet ausexceptions.BaseException
, nichtexceptions.Exception
.Siehe die Dokumentation für details:
InformationsquelleAutor der Antwort vartec
Es ist allgemein als best practice, nur fangen die Fehler, die Sie interessiert sind in. Im Fall von
shutil.rmtree
es wahrscheinlichOSError
:Wenn Sie möchten, still zu ignorieren, die Fehler, die Sie machen würde:
Warum? Sagen Sie, dass Sie (irgendwie) versehentlich übergeben Sie der Funktion einen integer anstelle eines Strings, wie:
Wird es geben, die Fehler "TypeError: die Nötigung zu Unicode: benötigen Sie string oder buffer, int gefunden" - Sie wollen wahrscheinlich nicht zu ignorieren, die schwierig zu Debuggen.
Wenn Sie definitiv ignorieren wollen, alle Fehler zu fangen
Exception
anstatt einer bloßenexcept:
- Anweisung. Wieder, warum?Nicht die Angabe einer exception fängt jeder Ausnahme, einschließlich der
SystemExit
Ausnahme, die zum Beispielsys.exit()
verwendet:Vergleichen Sie diese in der folgenden, die korrekt beendet:
Wenn Sie schreiben wollen immer besser werden Benehmens-code, der
OSError
Ausnahme darstellen kann verschiedene Fehler, aber in dem obigen Beispiel wollen wir nur ignorierenErrno 2
, so konnten wir sogar noch spezifischer:Könnte man auch
import errno
und ändern Sie dieif
zuif e.errno == errno.ENOENT:
InformationsquelleAutor der Antwort dbr
Es hängt davon ab, was du damit meinst "Handhabung."
Wenn du meinst, es zu fangen, ohne irgendeine Aktion, der code, den du gepostet hast funktioniert.
Wenn du meinst, dass Sie wollen, um Maßnahmen zu ergreifen, die auf eine Ausnahme ohne anhalten der Ausnahme von auf den stack, dann wollen Sie so etwas wie dieses:
InformationsquelleAutor der Antwort Jason Baker
Zuerst zitiere ich die Antwort von Jack o ' Connor von dieser thread. Der referenzierte thread geschlossen habe, damit ich hier schreiben:
"Es ist eine neue Art dazu kommen, das in Python 3.4:
Hier ist der commit Hinzugefügt: http://hg.python.org/cpython/rev/406b47c64480
Und hier der Autor Raymond Hettinger, reden über dieses und alle möglichen anderen Python-Schärfe: https://youtu.be/OSGv2VnC0go?t=43m23s
Meine zusätzlich ist die Python 2.7-äquivalent:
Dann benutzen Sie es wie in Python 3.4:
InformationsquelleAutor der Antwort Jabba
Vollständigkeit halber:
...aus dem python-tutorial.
Beachten Sie auch, dass Sie aufnehmen können, Ausnahme wie hier:
InformationsquelleAutor der Antwort cbare
Gibt es mehrere Möglichkeiten, dies zu tun.
Jedoch, die die Wahl der Beispiel hat eine einfache Lösung, die nicht für den Allgemeinen Fall.
Spezifisch für das Beispiel:
Statt
Hierzu:
Dies ist ein argument, spezifische
shutil.rmtree
. Sie können finden Sie in der Hilfe, die ihm durch die Durchführung der folgenden Schritte, und Sie werden sehen, es kann auch ermöglichen, dass die Funktionalität auf Fehler.Da diese deckt nur den schmalen Fall des Beispiels, werde ich weiter zeigen, wie das zu handhaben, wenn diese keyword-Argumenten existierte nicht.
Allgemeinen Ansatz
Da die oben deckt nur den schmalen Fall des Beispiels, werde ich weiter zeigen, wie das zu handhaben, wenn diese keyword-Argumenten existierte nicht.
Neues in Python 3.4:
Können Sie importieren Sie die
suppress
Kontext-manager:Aber nur unterdrücken die meisten spezifischen Ausnahme:
Sie wird stillschweigend ignorieren
FileNotFoundError
:Aus der docs:
Beachten Sie, dass
suppress
undFileNotFoundError
sind nur in Python 3.Wenn Sie wollen, dass Ihr code in Python 2 als auch, siehe den nächsten Abschnitt:
Python 2 & 3:
Für Python 2-kompatibel code
pass
ist der richtige Weg, um eine Anweisung, die eine no-op. Aber wenn du einen nacktenexcept:
, das ist dasselbe wieexcept BaseException:
umfasstGeneratorExit
,KeyboardInterrupt
, undSystemExit
, und im Allgemeinen, die Sie nicht wollen, zu fangen, solche Dinge.In der Tat, sollten Sie so spezifisch in der Benennung der Ausnahme, wie Sie können.
Hier ist Teil der Python (2) Ausnahme-Hierarchie, und wie Sie sehen können, wenn Sie fangen die mehr Allgemeinen Ausnahmen, die Sie verstecken können, Probleme, die Sie nicht erwarten:
Werden Sie wahrscheinlich wollen, zu fangen, eine OSError hier, und vielleicht die Ausnahme, die Sie don ' T care über ist, wenn es kein Verzeichnis.
Bekommen wir , dass bestimmten Fehlernummer, die aus der
errno
Bibliothek und reraise, wenn wir das nicht haben:Hinweis, eine bloße erhöhen, stellt sich die ursprüngliche Ausnahme, die ist wahrscheinlich das, was Sie wollen, in diesem Fall. Geschrieben prägnanter, als wir nicht wirklich brauchen, um explizit
pass
mit code im exception handling:InformationsquelleAutor der Antwort Aaron Hall
@Wenn Sie nur wollen eine try catch ohne die Ausnahme behandelt, wie Sie es tun in Python?
Dies wird Ihnen helfen, zu drucken, was die Ausnahme ist:( also versuchen zu fangen, ohne die Ausnahme behandelt, und drucken Sie die Ausnahme.)
reg,
Tilokchan
InformationsquelleAutor der Antwort Irengbam Tilokchan Singh
FYI der else-Klausel gehen können, nachdem alle Ausnahmen und werden nur dann ausgeführt, wenn der code in den versuchen nicht zu einer exception führen.
InformationsquelleAutor der Antwort MrChrisRodriguez
in python, wir behandeln Sie Ausnahmen ähnlich wie in anderen Sprache, aber der Unterschied ist, einige syntex Unterschied, zum Beispiel-
InformationsquelleAutor der Antwort Deepak Kumar 'SORTED'
Behandlung einer Ausnahme in python: Wenn Sie einige verdächtigen code, der eine Ausnahme auslösen, können Sie verteidigen Sie Ihr Programm, indem Sie den verdächtigen Programmcode in einen try: block.
InformationsquelleAutor der Antwort pavuluri santhi