当我执行以下代码时,我得到的是异常而不是正常行为。
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"
上面的代码没有任何异常,因此它不是打印“无异常”,而是将“异常”显示为输出。
答案 0 :(得分:2)
你做有例外;您正在捕获NameError
异常(它是Exception
的子类)。您获得该异常是因为fun1
尚不存在。
在<{em> fun1()
之前将try..except
定义移至,或者在 fun1()
之后将该代码移动到您调用的函数中创建
使用一般性较低的例外情况也会更好,它会使问题显得更早;你可以使用ValueError
如果你想测试一下,那么就不太可能因为无关的问题而被抛出:
>>> 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