当我在except:
块内部屈服时,我注意到Python 2.7.5中有一些奇怪的行为:
def generator():
try:
raise Exception()
except:
yield
raise
list(generator())
此代码以TypeError: exceptions must be old-style classes or derived from BaseException, not NoneType
为什么Python会这样做而不是重新引发异常,就像在yield
之前raise
之前没有那样?
(显然Python 3修复了这个疣,该函数会产生一个[None]列表,如你所料。)
(解决方法是将异常存储在变量中:except Exception as e: yield; raise e
)
答案 0 :(得分:6)
这只是Python 2.x中的一个错误。根据{{3}},问题在Python 3中得到修复,但由于向后移植的复杂性,修复程序在进入维护模式之前从未达到2.7:
这已在Python 3中修复。我不知道它是否值得向后移植 变化,因为它可能很难避免也向后移植 异常模型中的不兼容性。
八个月后......
由于2.7正在进行维护,因此不会后退。