一种检查长变量列表中是否有一个不是“ None”并返回不存在的变量的优雅方法?

时间:2018-09-26 21:08:27

标签: python

我从环境变量中加载了8个变量。如果这些都不是,我想保释并sys.exit-但我也想提醒用户缺少哪个变量。

有几种方法可以做到这一点。假设a = os.environ.get('a')代码是通过h

预先编写的

最详细的方法是:

if a is None:
    print("A is required")
    sys.exit(1)
if b is None:
    print("B is required")
    sys.exit(1)
if c is None:
    print("C is required")
    sys.exit(1)
...
so on until the check for h

最干净的方法是:

if not any([a,b,c,d,e,f,g,h]):
    print("? is required")
    sys.exit(1)

甚至:

if None in [a,b,c,d,e,f,g,h]:
    print("? is required")
    sys.exit(1)

是否有可能实际上从更多的python检查之一(后两个)中获取变量名并将其输出给用户?

我可以通过执行[a,b,c,d,e,f,g,h].index(None)来获取变量的 index ,但是我不确定如何从索引到变量名。

3 个答案:

答案 0 :(得分:4)

首先检索环境变量时执行检查:

def needenv(name):
    val = os.environ.get(name)
    if val is None:
        sys.exit('{} is required.'.format(name))
    return val

a = needenv('a')
b = needenv('b')
...

答案 1 :(得分:1)

您可以遍历环境:

required_vars = ['a', 'b']
for name in required_vars:
    if not name in os.environ:
        sys.exit('{} is required.'.format(name))

答案 2 :(得分:0)

我会将它们读入字典,然后可以使用all()检查一切是否正常,还可以报告缺少的内容(可能不止一个)。

env_dict[‘a’] = os.environ.get(‘a’) # etc.

if not all(v for k,v in env_dict.items()):
    missing = [k for k,v in env_dict.items() if v is None]