我不禁想知道......
配置:
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语句不应该做太多。但是,如果我将其删除,则未定义的变量异常会消失。
答案 0 :(得分:1)
只要您不重新定义名称(即将其分配给其他值),您就可以使用它而不使用global
语句从全局范围中隐式地获取它。
一旦您想要重新定义或修改它,您需要明确说明您正在谈论的名称。
>>> a = 'hello'
>>> def f():
... print(a)
...
>>> def f2():
... global a
... a = 'world'
... print(a)
...
>>> f()
hello
>>> f2()
world
>>> a
'world'