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?

War es hilfreich?

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 des args 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 fangen

Und 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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top