2011-11-23 133 views
1

我写了一个简单的Python模块,它有这个代码:为什么这个Python代码工作?

_log = logging.getLogger("mymodule") 
_started = False 

def set_log_level(level): 
    _log.setLevel(level) 
    if not _started: 
     _hdlr = logging.FileHandler('mymodule.log') 

当我打电话,因为符号_started没有找到set_log_level()程序失败。这是正常的,因为方法中缺少global _started。但我的问题是:符号_log_started具有相同的可见性,那么为什么可以找到这个符号?

+1

如果我在Python 2.7.1下运行这个,我没有错误。我添加了一行'set_log_level(3)'。 –

+1

它不应该失败。那是所有代码吗? – delnan

+0

是你的整个代码?你在实际运行的代码中是否有像'_started = True'这样的东西?在Python函数中存在赋值将会影响全局,即使赋值在第一次使用后出现*。 –

回答

3

我不认为你的程序因为你的想法而失败。除非实际修改该变量,否则不需要在函数中使用global声明。 (否则,您需要使用全局的方式访问该名称空间中的某些内容,甚至调用其他函数。)

我不确定在运行程序时实际发生了什么 - 也许您可以提供回溯或问题描述。