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