未定义的变量&范围规则

时间:2014-02-14 13:28:22

标签: python

我不禁想知道......

配置:

mathieu@mathieu-UX21E:~/$ python --version
Python 2.7.5+

代码:

import logging
logger = logging.getLogger('x')

def main():
    print logger
    logger = 2

if __name__ == "__main__":
    main()

输出:

mathieu@mathieu-UX21E:~/$ python ./manager.py 
Traceback (most recent call last):
  File "./manager.py", line 9, in <module>
    main()
 File "./manager.py", line 5, in main
    print logger
UnboundLocalError: local variable 'logger' referenced before assignment

显然,我希望print语句能够访问全局定义的logger变量。有没有我对python变量范围规则不了解的东西?

另外,显然,logger = 2语句不应该做太多。但是,如果我将其删除,则未定义的变量异常会消失。

1 个答案:

答案 0 :(得分:1)

只要您不重新定义名称(即将其分配给其他值),您就可以使用它而不使用global语句从全局范围中隐式地获取它。

一旦您想要重新定义或修改它,您需要明确说明您正在谈论的名称。

>>> a = 'hello'
>>> def f():
...    print(a)
... 
>>> def f2():
...    global a
...    a = 'world'
...    print(a)
... 
>>> f()
hello
>>> f2()
world
>>> a
'world'