0
此代码段是与龙卷风3.2行,但将引发在龙卷风异常4. (该代码是一个复杂的代码所提取的和简化版本。) 为什么这个Python代码与Tornado 4打破?
from tornado import gen
from tornado.ioloop import IOLoop
@gen.engine
def foo():
@gen.Task
def bar(callback=None):
print bar
callback(None)
yield bar
ioloop.stop()
ioloop = IOLoop.current()
ioloop.add_callback(foo)
ioloop.start()
(与Python 2.7.6测试)
在龙卷风4,失败与此异常:
...
File "/local/lib/python2.7/site-packages/tornado/gen.py", line 160, in wrapper
result = func(*args, **kwargs)
File "temp.py", line 9, in bar
print bar
NameError: free variable 'bar' referenced before assignment in enclosing scope
我认为闭包变量的管理是翻译的任务。为什么龙卷风会影响到这一点?
如果我们将'bar'移动到全局范围,则会引发此异常:'NameError:全局名称'bar'未定义 – 2014-09-06 07:53:20