2017-05-18 2 views
-3

Ich habe einige Probleme, meine Fehlerbehandlung zur Arbeit zu bekommen Ich habe mein Suchen und Graben erschöpft, kann mir jemand ein wenig helfen. Ich versuche im Grunde zu überprüfen, ob der Pfad existiert, wenn es file_location setzt und weitermachen, sonst make-Verzeichnis, wenn der Benutzer keinen Zugriff auf den Ordner create hat, das Verzeichnis in den Benutzer My document.Python-Problem mit Ausnahmen

alles funktioniert, aber wenn ich versuche, den Fehler zu zwingen, Meine Dokumente zu verwenden, bekomme ich jedoch Fehler, so dass ich nicht 100% sicher bin, dass meine außer ausgeführt wird.

try: 
    if os.path.exists(project_dir): 
     file_location = (project_dir) 
    else: 
     os.makedirs(project_dir) 
     file_location = (project_dir) 
except OSError as exc: 
    if exc.errno != errno.EEXIST: 
     raise 
    pass 
    os.makedirs(user_dir) 
    file_location = (user_dir) 
+1

Bitte geben Sie Ihren Code so ein, dass er die tatsächlichen Einrückungen widerspiegelt, die Sie verwenden. – patrick

+0

Willkommen bei StackOverflow. Bitte lesen und befolgen Sie die Buchungsrichtlinien in der Hilfe. [Minimales, vollständiges, überprüfbares Beispiel] (http://stackoverflow.com/help/mcve) gilt hier. Wir können Ihnen nicht effektiv helfen, bis Sie Ihren MCVE-Code veröffentlicht und das Problem genau beschrieben haben. Wir sollten in der Lage sein, Ihren gesendeten Code in eine Textdatei einzufügen und das beschriebene Problem zu reproduzieren. – Prune

+0

danke, Patrick mein Versuch, diesen Beitrag zu machen, aber es wird runterkommen! –

Antwort

0

Ihr Programm ändern für Klarheit ein wenig fließen und versuchen Exception-Handler für sparen, wenn Ihr Programm in signifikanter Weise versagt und muss den Benutzer warnen oder vollständig Programmablauf (Ausnahmebedingungen) ändern. Ausnahmen gibt es als eine Art Protokoll, wenn das System ein Problem nicht beheben kann.

Wenn Sie aus einem Flugzeug springen müssen, ist das Letzte, was Sie herausfinden wollen, dass es keine Fallschirme gibt. Verwenden Sie also os.path.exists(), um Ihnen mitzuteilen, ob ein Pfad gültig ist, wenn Sie eine Ausnahme behandeln. Der sicherste Standardwert ist das aktuelle Verzeichnis, auf das unter Verwendung von . als Pfad zugegriffen werden kann. Wenn nicht, sollten Sie davon ausgehen können, dass das Benutzerverzeichnis bereits existiert, nur für den Fall, dass Ihr Code abstürzen und brennen muss. mkdir bevor Sie Ausnahmen behandeln müssen, nicht nach.

Achten Sie auch darauf, in Python richtig einzurücken. Der Abstand kann auch helfen, Fehler zu erkennen, also haben Sie keine Angst, einen Zeilenumbruch zu verwenden, wenn der Code einfacher zu lesen ist. Ihre try Klausel erfordert eine zusätzliche Einrückungsebene:

try: 
    # simplify the if statement to stop repeating yourself 
    if not os.path.exists(project_dir): 
     os.makedirs(project_dir) 
    file_location = project_dir 

except OSError as exc: 
    if exc.errno != errno.EEXIST: 
     raise # reraise the current exception 

    if os.path.exists(user_dir): 
     file_location = user_dir 
    else: # FUBAR. Sound sirens immediately and try everything to keep the file somewhere in memory before failing. 
     print("[ERROR] {} was inaccessible.\nWhile attempting to recover, {} did not exist so files could not be backed up." 
      .format(project_dir, user_dir)) 
     raise 

Der Ausfall eines Exception-Handler sollte nie passieren dürfen. Es ist ein katastrophales Ereignis, und Sie sollten erwarten, dass die einzige verbleibende Option Desktop-Crash ist. Eine Ausnahme kann abgefangen und wiederhergestellt werden. Zwei oder drei verschachtelte Ausnahmen bedeuten, dass dein Computer Empfindungsvermögen erreicht hat und damit begonnen hat, seine digitalen Schäkel zu stürzen (oder dass du darüber nachdenken musst, warum du Ausnahmen handelst).

+0

Vielen Dank für Ihre Hilfe. –