Python 为什么可以';我不能在排除异常之后调用异常吗?
为什么我不能在捕获异常类后引发异常实例?奇怪的是,我在从函数运行脚本时遇到了这个错误,而不是在python shell中直接运行脚本时Python 为什么可以';我不能在排除异常之后调用异常吗?,python,exception,scope,Python,Exception,Scope,为什么我不能在捕获异常类后引发异常实例?奇怪的是,我在从函数运行脚本时遇到了这个错误,而不是在python shell中直接运行脚本时 In [2]: def do(): ...: try: ...: raise ValueError('yofoo') ...: except TypeError, ValueError: ...: raise ValueError('yo') ...: In [3]: do() -
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
[2]中的:def do():
…:试试看:
…:提升值错误('yofoo')
…:除TypeError、ValueError外:
…:提升值错误('yo')
...:
在[3]:do()中
---------------------------------------------------------------------------
取消绑定LocalError回溯(最近一次调用上次)
在()
---->1 do()
在do()中
1 def do():
2.尝试:
---->3提高值错误(“yofoo”)
4除TypeError、ValueError外:
5提升值错误('yo')
UnboundLocalError:赋值前引用的局部变量“ValueError”
此处出现预期错误:
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
[3]中的:尝试:
…:提升值错误(“foo”)
…:除值错误外:
…:提升值错误(“bar”)
...:
---------------------------------------------------------------------------
ValueError回溯(最近一次调用上次)
在()
2升值错误(“foo”)
3除值错误外:
---->4上升值错误(“bar”)
5.
值错误:bar
应该是
except (TypeError, ValueError):
当使用除TypeError、ValueError:之外的时,将异常实例分配给变量名ValueError
对于当前代码,当Python解析do
函数时,它注意到ValueError
是一个局部变量,因为除了TypeError,ValueError:
为ValueError
赋值。但是,当您在第一个try-suite
中使用raisevalueerror('yofoo')
引用它时,局部变量ValueError
没有值。因此,您会得到UnboundLocalError
发件人:
请注意,此元组周围的括号是必需的,因为
除了ValueError,e:语法是否用于通常编写的内容
除ValueError外,在现代Python中为e:。旧的
为了向后兼容,仍然支持语法。这意味着
除了RuntimeError,TypeError不等同于Exception
(RuntimeError,TypeError):但除了RuntimeError作为TypeError之外:
这不是你想要的
except (TypeError, ValueError):
... except (RuntimeError, TypeError, NameError):
... pass