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
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
Wie kann man Ausnahmen richtig ignorieren?
Es gibt mehrere Möglichkeiten, dies zu tun.
Die Wahl des Beispiels hat jedoch eine einfache Lösung, die den allgemeinen Fall nicht abdeckt.
Anstelle von
try:
shutil.rmtree(path)
except:
pass
Tun Sie dies:
shutil.rmtree(path, ignore_errors=True)
Dies ist ein spezifisches Argument für shutil.rmtree
. Sie können die Hilfe dazu sehen, indem Sie folgendes tun, und Sie werden sehen, dass es auch Funktionen für Fehler zulassen kann.
>>> import shutil
>>> help(shutil.rmtree)
Da dies nur den engen Fall des Beispiels abdeckt, werde ich weiter zeigen, wie man damit umgeht, wenn diese Schlüsselwortargumente nicht existieren.
Da die obigen Ausführungen nur den engen Fall des Beispiels abdecken, zeige ich weiter auf, wie man damit umgeht, wenn es diese Schlüsselwortargumente nicht gibt.
Sie können die suppress
Kontext-Manager:
from contextlib import suppress
Aber unterdrücken Sie nur die spezifischste Ausnahme:
with suppress(FileNotFoundError):
shutil.rmtree(path)
Sie ignorieren stillschweigend eine FileNotFoundError
:
>>> with suppress(FileNotFoundError):
... shutil.rmtree('bajkjbkdlsjfljsf')
...
>>>
Von der docs :
Wie bei jedem anderen Mechanismus, der Ausnahmen vollständig unterdrückt, sollte dieser Kontextmanager nur für sehr spezielle Fehler verwendet werden bei denen die stillschweigende Fortsetzung der Programmausführung bekanntlich die das Richtige zu tun ist.
なお suppress
y FileNotFoundError
sind nur in Python 3 verfügbar.
Wenn Sie möchten, dass Ihr Code auch in Python 2 funktioniert, lesen Sie den nächsten Abschnitt:
Wenn Sie nur ein try/except ausführen möchten, ohne die Ausnahme zu behandeln, wie macht man das in Python?
Ist die folgende Vorgehensweise die richtige?
try : shutil.rmtree ( path ) except : pass
Für Python 2 kompatiblen Code, pass
ist der richtige Weg, um eine Anweisung zu haben, die ein No-op ist. Aber wenn Sie eine bloße except:
Das ist dasselbe, als wenn man except BaseException:
die Folgendes umfassen GeneratorExit
, KeyboardInterrupt
y SystemExit
und im Allgemeinen will man sich diese Dinge nicht einfangen.
Vielmehr sollten Sie die Ausnahme so genau wie möglich benennen.
Hier ist ein Teil der Python (2) Ausnahmehierarchie Wenn Sie allgemeinere Ausnahmen abfangen, können Sie Probleme verbergen, die Sie nicht erwartet haben:
BaseException
+-- SystemExit
+-- KeyboardInterrupt
+-- GeneratorExit
+-- Exception
+-- StopIteration
+-- StandardError
| +-- BufferError
| +-- ArithmeticError
| | +-- FloatingPointError
| | +-- OverflowError
| | +-- ZeroDivisionError
| +-- AssertionError
| +-- AttributeError
| +-- EnvironmentError
| | +-- IOError
| | +-- OSError
| | +-- WindowsError (Windows)
| | +-- VMSError (VMS)
| +-- EOFError
... and so on
Wahrscheinlich wollen Sie hier einen OSError abfangen, und vielleicht ist die Ausnahme, die Sie nicht interessiert, wenn es kein Verzeichnis gibt.
Wir können que spezifische Fehlernummer aus der errno
Bibliothek, und erhöhen, wenn wir die nicht haben:
import errno
try:
shutil.rmtree(path)
except OSError as error:
if error.errno == errno.ENOENT: # no such file or directory
pass
else: # we had an OSError we didn't expect, so reraise it
raise
Beachten Sie, dass eine bloße Erhöhung die ursprüngliche Ausnahme auslöst, was Sie in diesem Fall wahrscheinlich wollen. Prägnanter geschrieben, da wir nicht wirklich explizit pass
mit Code in der Ausnahmebehandlung:
try:
shutil.rmtree(path)
except OSError as error:
if error.errno != errno.ENOENT: # no such file or directory
raise
Ich musste Fehler in mehreren Befehlen ignorieren und Scheiß drauf hat den Zweck erfüllt
import fuckit
@fuckit
def helper():
print('before')
1/0
print('after1')
1/0
print('after2')
helper()
Wenn Sie nur ein Try-Catch ausführen wollen, ohne die Ausnahme zu behandeln, wie macht man das in Python?
Dies wird Ihnen helfen, zu drucken, was die Ausnahme ist:( d.h. versuchen Sie catch ohne Behandlung der Ausnahme und drucken Sie die Ausnahme.)
import sys
try:
doSomething()
except:
print "Unexpected error:", sys.exc_info()[0]
In Python behandeln wir Ausnahmen ähnlich wie in anderen Sprachen, aber der Unterschied liegt zum Beispiel in der unterschiedlichen Syntax,
try:
#Your code in which exception can occur
except <here we can put in a particular exception name>:
# We can call that exception here also, like ZeroDivisionError()
# now your code
# We can put in a finally block also
finally:
# Your code...
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.
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