2016-04-22 5 views
-1

Wenn ich den folgenden Code ausführe, bekomme ich eine Ausnahme statt normales Verhalten.Python: versuche außer sonst Seltsames Verhalten

try: 
    fun1(1) 
    fun1(1) 
except Exception as e: 
    print "exception" 
else: 
    print "hi" 


def fun1(i): 
    if i == 0: 
     raise Exception() 
    else: 
     print "no exception" 

Der obige Code hat keine Ausnahmen, so dass anstelle von "keine Ausnahme" zeigt "Ausnahme" als Ausgabe.

+0

Sie einen 'NameError' bekommen ... –

Antwort

2

Sie do haben eine Ausnahme; Sie fangen die Ausnahme (die eine Unterklasse von Exception ist). Sie erhalten diese Ausnahme, weil fun1noch nicht existiert.

Bewegen Sie die fun1() Definition vor der try..except oder diesen Code in eine Funktion bewegen Sie nachfun1() wurde erstellt nennen.

Sie wären auch besser dran mit einer weniger generischen Ausnahme, es hätte das Problem viel früher sichtbar gemacht; Sie ValueError verwenden könnte, wenn man die Dinge testen wollen, ist es weit weniger wahrscheinlich, dass in keinem Zusammenhang Fragen geworfen werden:

>>> try: 
...  fun1(1) 
...  fun1(1) 
... except ValueError: 
...  print "exception" 
... else: 
...  print "hi" 
... 
Traceback (most recent call last): 
    File "<stdin>", line 2, in <module> 
NameError: name 'fun1' is not defined 
>>> def fun1(i): 
...  if i == 0: 
...   raise ValueError() 
...  else: 
...   print "no exception" 
... 
>>> try: 
...  fun1(1) 
...  fun1(1) 
... except ValueError: 
...  print "exception" 
... else: 
...  print "hi" 
... 
no exception 
no exception 
hi 
>>> try: 
...  fun1(0) 
... except ValueError: 
...  print "exception" 
... else: 
...  print "hi" 
... 
exception