捕获该Exception类后,为什么不能引发Exception实例?奇怪的是,当我从某个函数运行脚本时遇到了此错误,但是当直接在python shell中运行时却没有。

In [2]: def do():
   ...:     try:
   ...:         raise ValueError('yofoo')
   ...:     except TypeError, ValueError:
   ...:         raise ValueError('yo')
   ...:

In [3]: do()
---------------------------------------------------------------------------
UnboundLocalError                         Traceback (most recent call last)
<ipython-input-3-30c46b84d9a4> in <module>()
----> 1 do()

<ipython-input-2-b62158d6343b> in do()
      1 def do():
      2     try:
----> 3         raise ValueError('yofoo')
      4     except TypeError, ValueError:
      5         raise ValueError('yo')

UnboundLocalError: local variable 'ValueError' referenced before assignment

预期的错误在这里:
In [3]: try:
   ...:     raise ValueError("foo")
   ...: except ValueError:
   ...:     raise ValueError("bar")
   ...:
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-3-d5c83419a5ea> in <module>()
      2     raise ValueError("foo")
      3 except ValueError:
----> 4     raise ValueError("bar")
      5

ValueError: bar

最佳答案

except TypeError, ValueError:

应该
except (TypeError, ValueError):

使用except TypeError, ValueError:时,您将Exception实例分配给变量名ValueError

对于您当前的代码,当Python解析do函数时,它会注意到ValueError是局部变量,因为except TypeError, ValueError:ValueError分配了一个值。但是,当您在第一个try-suite中使用raise ValueError('yofoo')进行引用时,本地变量ValueError没有任何值。这样就得到UnboundLocalError

the docs:
... except (RuntimeError, TypeError, NameError):
...     pass

关于python - 为什么除异常后不能调用异常?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22332599/

10-12 20:02