【发布时间】:2012-01-05 00:15:57
【问题描述】:
我写了一个简单的python模块,它有这样的代码:
_log = logging.getLogger("mymodule")
_started = False
def set_log_level(level):
_log.setLevel(level)
if not _started:
_hdlr = logging.FileHandler('mymodule.log')
当我调用set_log_level() 时,程序失败,因为找不到符号_started。这是正常的,因为方法中缺少global _started。但是我的问题是:符号_log和_started的可见性一样,那为什么能找到这个符号呢?
【问题讨论】:
-
如果我在 Python 2.7.1 下运行它,我不会收到任何错误。我添加了一行
set_log_level(3)。 -
它不应该失败。这就是所有代码吗?
-
这是你的全部代码吗?您实际运行的代码中是否有类似
_started = True的内容? Python 函数中存在的赋值会影响全局,即使赋值出现在在第一次使用之后。 -
@GregHewgill 是对的!我想念sn-p中的那些行。此行将 _started 转换为局部变量,这就是需要
global _started的原因。
标签: python module visibility globals