【问题标题】: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”作为输出。

【问题讨论】:

  • 你会得到一个NameError...

标签: 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-14
    • 2012-04-17
    • 2011-01-27
    相关资源
    最近更新 更多