Tornado 学习——全局变量的疑惑

2015-07-02 16:02:12 +08:00
 dengqianyi
HI All:

这边初学习Tornado框架,写了以下代码:
g_ConnectionCount = 0

class MyTcpServer(TCPServer):
def handle_stream(self, stream, address):
print "New Connection"
g_ConnectionCount = g_ConnectionCount + 1
print "g_ConnectionCount",g_ConnectionCount
pass
pass

if __name__ == "__main__":
_myServer = MyTcpServer()
_myServer.listen(6666)
_ioLoop = IOLoop.instance()
tornado.autoreload.start(_ioLoop)
_ioLoop.start()
pass

本以为httpServer下是不行的,TcpServer下应该可行才对。但实际运行结果:UnboundLocalError: local variable 'g_ConnectionCount' referenced before assignment

Tornado 不是单进程单线程么?python下声明一个全局的g_ConnectionCount应该能被访问到才是。
6338 次点击
所在节点    Python
6 条回复
lilydjwg
2015-07-02 16:11:38 +08:00
你的 Python 基础太差了。函数定义里加句 global g_ConnectionCount。
dengqianyi
2015-07-02 16:16:35 +08:00
@lilydjwg 你好,我这边没有系统学过Python,都边学边用的。啊!我理解了,是不是因为这个值是在类里面访问的,所以会导致不识别?如果直接是全局函数,那就没问题咯?!!
Cynic222
2015-07-02 16:39:13 +08:00
@dengqianyi 确实是常见坑,google会不咯,搜UnboundLocalError
lilydjwg
2015-07-02 17:18:54 +08:00
@dengqianyi 不是。你应当认真阅读 Python 官方教程。

凡是在本作用域被赋值的名字,都是局部于本作用域的名字,除非它们被 global 或者 nonlocal 声明过。所以你如果想在非全局空间(函数或者类的定义里)改变一个全局名字的指向,需要使用 global 声明,否则 Python 会认为你想在当前作用域创建一个同名的名字。
bertram
2015-07-03 14:03:41 +08:00
你说定义了全局变量 我就一直再找global
AndersQ
2015-07-03 18:56:53 +08:00
UnboundLocalError: local variable 'g_ConnectionCount' referenced before assignment

这种错误,随便Google一下,或者翻阅一下Python文档都能够解决。请不要发这种低级错误求助帖!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/202807

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX