Fangen Sie nur einige Laufzeitfehler in Python
-
05-07-2019 - |
Frage
Ich bin der Import ein Modul, das die folgenden Fehler in einigen Bedingungen aufwirft: Runtime: pyparted erfordert Root-Zugriff
Ich weiß, dass ich nur für Root-Zugriff vor dem Import überprüfen, aber ich würde gerne wissen, wie diese spesific Art von Fehlern für die Zukunft über einen try / except-Anweisung zu fangen. Gibt es eine Möglichkeit zwischen dieser Runtime und andere zu unterscheiden, die angehoben werden könnten?
Lösung
Ich weiß, dass ich nur für Root-Zugriff vor dem Import überprüfen, aber ich würde gerne wissen, wie diese spesific Art von Fehlern für die Zukunft über einen try / except-Anweisung zu fangen. Gibt es eine Möglichkeit zwischen dieser Runtime und andere zu unterscheiden, die angehoben werden könnten?
Wenn der Fehler durch einen bestimmten Zustand verursacht wird, dann denke ich, der einfachste Weg, um den Fehler zu fangen ist für die Bedingung zu testen, und Sie können einem spezifischere Fehler selbst erhöhen. Nach all dem ‚Fehler‘ vorhanden ist, bevor der Fehler ausgelöst wird, da in diesem Fall sein ein Problem mit der Umwelt.
ich mit denen übereinstimmen oben - Textanpassung auf einen Fehler ist ein bisschen eine erschreckende Aussicht
.Andere Tipps
Sie können Attribute der Ausnahme überprüfen von anderen möglichen RuntimeError
Ausnahmen zu unterscheiden. Zum Beispiel Reraise die Fehler, wenn es nicht einen vordefinierte Nachrichtentext entspricht.
try:
import pypatred
except RuntimeError,e:
if e.message == 'RuntimeError: pyparted requires root access':
return 'pyparted - no root access'
raise
Natürlich direkten Textvergleich ist nur ein Beispiel, könnten Sie für enthalten Substrings oder regulären Ausdrücken suchen.
Es ist erwähnenswert, dass das .message
Attribut von Ausnahmen ist deprecated mit Python 2.6 starten. Sie können den Text in .args
finden, in der Regel args[0]
.
... Für 2.6, das
message
Attribut wird zugunsten desargs
Attribut veraltet.
try:
import pyparted
except RuntimeError:
print('RuntimeError is raised')
raise
Weitere Informationen auf Ausnahmebehandlung in Tutorial .
Diese Situation sollte produzieren ImportError
in meinem Meinung. Und Sie können es selbst tun:
try:
import pyparted
except RuntimeError as e:
raise ImportError(e)
Ja.
try:
import module
except RuntimeError:
pass
Importe wie jede andere Aussage interpretiert werden, sind sie nicht besonders. Sie könnten ein tun
if condition:
import module
try:
import ...
except RuntimeError:
# Do something
Runtime ausgelöst, wenn ein Fehler festgestellt wird, dass Doesn‘ t fallen in eine der anderen Kategorien
def foo():
try:
foo()
except RuntimeError, e:
print e
print " Runtime Error occurred due to exceeded maximum recursion depth "
Das ist, wie wir die Runtime durch die überschritten Rekursion Grenze in Python
verursacht fangenUnd wenn Sie möchten, dass Ihre Funktion über die Rekursion Grenze rufen Sie Folgendes tun können
import sys
def foo():
try:
foo()
except RuntimeError, e:
sys.setrecursionlimit(1200)
foo()
Aber immer ist es jedoch empfehlenswert, die Rekursion Grenze zu ändern, aber sehr kleine Änderungen in der Rekursion Grenze erlaubt