检查命名空间中是否存在变量

时间:2015-06-03 10:40:06

标签: python namespaces argparse

我正在尝试使用我的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;但我不能为我的生活找到如何以有效的方式做到这一点。

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

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