【问题标题】:Checking if variable exists in Namespace检查命名空间中是否存在变量
【发布时间】:2015-08-17 12:34:52
【问题描述】:

我正在尝试使用我的 argparse 的输出(简单的 argparse,只有 4 个位置参数,每个函数的启动取决于设置为 True 的变量)

Namespace(battery=False, cache=True, health=False, hotspare=False)

目前,我正试图弄清楚如何最好地让 python 查看这些变量之一何时设置为 True;无需像现在这样硬编码:

if args.battery is True:
    do_something()
elif args.cache is True:
    do_something_else()
etc ...

我宁愿只使用一个命令来检查命名空间中是否存在变量以及它是否设置为 True;但我一生都无法弄清楚如何以有效的方式做到这一点。

【问题讨论】:

  • argparse 使用getattr(namespace, dest) 来检查值。 vars(args) 创建字典。您可以从中获取键和值。

标签: python namespaces argparse


【解决方案1】:

如果通过列表理解解决了我的问题(在使用提示使用 vars() 之后):

l = [ k for (k,v) in args.items() if v ]

l 是 dict 中值为 'True' 的键的列表

【讨论】:

    【解决方案2】:

    Use vars() to convert your namespace to a dictionary,然后使用dict.get('your key'),如果它存在则返回你的对象,如果不存在则返回None。

    示例

    my_args.py

    import argparse
    
    
    _parser = argparse.ArgumentParser("A description of your program")
    
    _parser.add_argument("--some-arg", help="foo", action="store_true")
    _parser.add_argument("--another-one", type=str)
    
    your_args_dict = vars(_parser.parse_args())
    
    print(your_args_dict.get('some_arg'))
    print(your_args_dict.get('another_one'))
    print(your_args_dict.get('foo_bar'))
    

    命令行

    $ python3 my_args.py --some-arg --another-one test
    
    True
    test
    None
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-04
      • 1970-01-01
      • 2013-09-10
      • 2018-04-04
      • 1970-01-01
      • 2013-10-03
      • 2014-04-19
      • 2014-09-08
      相关资源
      最近更新 更多