如何在Python中的另一个模块中解决未初始化的全局变量?

时间:2012-02-06 09:33:10

标签: python

我有一个问题,我正在尝试使用另一个模块的函数,但该函数调用一个调试函数来检查全局变量是否具有某个属性。导入函数时,未设置此全局变量(否则使用parser.parse_args设置),因此函数会抱怨该属性不存在。澄清:

档案findfile.py

_args = {}

def _debug(msg):
    if _TEST and _args.debug:
        print msg

def findfile(filename):
    ...
    _debug("found file")
    ...

if __name__ == "__main__":
    ...
    _args = parser.parse_args()
    ...

档案copyafile.py

import findfile

findfile.findfile("file1")

这给了我

AttributeError: 'dict' object has no attribute 'debug'

现在我明白parser.parse_args()返回一个名称空间(??),而_args.debug并没有真正查看dict。但我的问题是:在这种情况下,我如何正确地将某些内容分配给_args以将_args.debug设置为False

我无法更改findfile.py,但我可以更改copyafile.py

这些东西通常如何处理呢?什么是在脚本中启用调试标志的pythonic方法?

1 个答案:

答案 0 :(得分:1)

findfile.py错误,因为它的编写,但您可以尝试使其工作,无论如何设置Argumentparser的内容如下:

parser.add_argument('debug', action='store_true')

然后用:

import findfile
findfile._args = parser.parse_args()

默认情况下将_args.debug设置为False

关于您的错误:

您得到AttributeError: 'dict' object has no attribute 'debug',因为如果它是Namespace,您就试图访问dict

也许一个例子可以澄清Namespace是什么:

>>> d = {'apple': 'red'}
>>> d['apple']
'red'
>>> from argparse import Namespace
>>> ns = Namespace(apple='red')
>>> ns.apple
'red'