【问题标题】:Python: try except else Strange behaviorPython:尝试除了其他奇怪的行为
【发布时间】:2016-04-22 09:05:08
【问题描述】:
当我执行以下代码时,我得到一个异常而不是正常行为。
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"
上面的代码没有任何异常,所以不是打印“no exception”,而是显示“exception”作为输出。
【问题讨论】:
标签:
python
exception
exception-handling
try-catch
【解决方案1】:
你确实有一个例外;您正在捕获NameError 异常(它是Exception 的子类)。你得到这个异常是因为fun1 还不存在。
将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