Python:尝试除了其他奇怪的行为

时间:2016-04-22 09:05:08

标签: python exception exception-handling try-catch

当我执行以下代码时,我得到的是异常而不是正常行为。

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"

上面的代码没有任何异常,因此它不是打印“无异常”,而是将“异常”显示为输出。

1 个答案:

答案 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