我有一个问题,我正在尝试使用另一个模块的函数,但该函数调用一个调试函数来检查全局变量是否具有某个属性。导入函数时,未设置此全局变量(否则使用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方法?
答案 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'