V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
dengqianyi
V2EX  ›  Python

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

  •  
  •   dengqianyi · 2015-07-02 16:02:12 +08:00 · 6520 次点击
    这是一个创建于 3465 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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应该能被访问到才是。
    6 条回复    2015-07-03 18:56:53 +08:00
    lilydjwg
        1
    lilydjwg  
       2015-07-02 16:11:38 +08:00   ❤️ 1
    你的 Python 基础太差了。函数定义里加句 global g_ConnectionCount。
    dengqianyi
        2
    dengqianyi  
    OP
       2015-07-02 16:16:35 +08:00
    @lilydjwg 你好,我这边没有系统学过Python,都边学边用的。啊!我理解了,是不是因为这个值是在类里面访问的,所以会导致不识别?如果直接是全局函数,那就没问题咯?!!
    Cynic222
        3
    Cynic222  
       2015-07-02 16:39:13 +08:00
    @dengqianyi 确实是常见坑,google会不咯,搜UnboundLocalError
    lilydjwg
        4
    lilydjwg  
       2015-07-02 17:18:54 +08:00
    @dengqianyi 不是。你应当认真阅读 Python 官方教程。

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

    这种错误,随便Google一下,或者翻阅一下Python文档都能够解决。请不要发这种低级错误求助帖!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5792 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 02:44 · PVG 10:44 · LAX 18:44 · JFK 21:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.