首页 > 解决方案 > 如何查看 argparse.NameSpace Python 对象的属性?

问题描述

对于涉及多个脚本(数据处理、模型调整、模型训练、测试等)的项目,我可以将所有<class 'argparse.ArgumentParser'>对象作为我命名的模块中每个脚本任务的函数的返回值cli.py。但是,在调用脚本本身 ( __main__) 中,在调用 之后args = parser.parse_args(),如果我输入args.VS Code,我不会得到特定于该对象的建议属性。如何argparse.NameSpace在 VS Code 中获取对象的建议属性?

例如,

"""Module for command line interface for different scripts."""
import argparse
def some_task_parser(description: str) -> argparse.ArgumentParser:
  parser = argparse.ArgumentParser(description=description)
  parser.add_argument('some_arg')
  return parser

然后

"""Script for executing some task."""
from cli import some_task_parser
if __name__ == '__main__':
  parser = some_task_parser('arbitrary task')
  args = parser.parse_args()
  print(args.)  # I WANT SUGGESTED ATTRIBUTES (SUCH AS args.some_arg) TO POP UP!!

标签: pythonvisual-studio-codeargparse

解决方案


我不了解 VSCode,在ipython会话中,选项卡完成确实显示Namespace. argparse.Namespace是一个比较简单的对象类。我认为你想要的只是attributes这个对象的。

In [238]: args = argparse.Namespace(test='one', foo='three', bar=3)
In [239]: args
Out[239]: Namespace(bar=3, foo='three', test='one')
In [240]: args.
                bar      test    
                foo      args.txt

但是这些属性在开发过程中将不可用。它们在运行时通过解析操作放在那里。它们不能从parser设置中可靠地推断出来。当然argparse不提供这样的帮助。

我经常建议开发人员包括一个

print(args)

在调试阶段,他们可以清楚地了解解析器的作用。


推荐阅读