2016-04-16 3 views
1

Es ist etwas seltsam passiert mit meinem Code, ich habe eine erste Funktion, die so geht:Versuchen und mit Ausnahme ausgeführt, sowohl wenn durch eine andere Funktion namens

def function1(): 
    try : #1 
     #try to open a file 
     #read file 
     #return info variable from the file 
    except : #1 
     try : #2 
      #try to open a web page 
      #read web page 
      if directory1 not in directorylist : 
       #create directory1 
       #change working directory to directory1 
      else : 
       #change working directory to directory1 
      #write web page content in a file 
      #return info variable from the file 
     except : #2 
      try : #3 
       #try to open a second web page 
       #print error message 1 
      except : #3 
       #print error message 2 
     #set info variable to None 
     #return info variable 

Also diese Funktion einwandfrei funktioniert, wenn sie im Hauptprogramm aufgerufen, aber wenn ich versuche, Funktion1 in einer anderen Funktion2 aufzurufen, werden beide Versuche # 2 und außer # 2 ausgeführt! Ursache Verzeichnis1 ist erstellt und Fehlermeldung 1 wird gedruckt, auch meine Info-Variable entspricht keiner.

Wie kann Funktion1 in einer zweiten Funktion Mess versuchen und außer Klauseln?

Vielen Dank!

+0

Vielleicht gab es danach einen Fehler. Vielleicht schreibe ich den Seiteninhalt in eine Datei. – zondo

+0

@zondo In jedem Fall funktioniert es, wenn es von main aufgerufen wird, funktioniert aber nicht, wenn es von einer anderen Funktion aufgerufen wird – leas

Antwort

2

Warum ist es überraschend? try Block soll ausgeführt werden, bis einige exception ausgelöst wird und danach except Block ausgeführt wird. Warum sieht es so aus, als ob beide Blöcke trotz einer Ausnahme ausgeführt wurden?

Einer der wahrscheinlichsten Gründe ist, dass es Sachen in try Block gibt, der nichts mit der Ausnahme zu tun hat, die ausgelöst wird. Das ist der Hauptgrund für den else Block. Refactoring Code wie könnte helfen

try: 
    # only statements that might raise exception 
except SomeException: 
    # except block 
else: 
    # everything you wanted do if no exception was raised 

folgt Wenn es ein großer Teil des Codes ist, fetteren der else Block, sind die Dinge wahrscheinlich glatt gehen.

0

Wenn beim Ausführen von body of try # 2 eine Ausnahme ausgelöst wird, wird offensichtlich außer # 2 ausgeführt. Sie sollten wahrscheinlich prüfen, welche Art von Ausnahme ausgelöst wird und in welcher Zeile.

Verwandte Themen