多次尝试除非值可能不存在

时间:2015-06-09 09:47:52

标签: python python-2.7 try-except

我需要检查一个或另一个环境变量。

随意变量 - 我可以使用:

if var1:
    print('Var1 found')
elif var2:
    print('Var2 found')
else:
    print('Neither Var1 nor Var2 not found')

如何为环境变量做同样的事情?

我无法使用if/else,因为如果找不到变量,os.environ会升级KeyError

  File "C:\Python27\lib\os.py", line 425, in __getitem__
    return self.data[key.upper()]
KeyError: 'BAMBOO_WORKING_DIRECTORY'

如果我要做两个try/except,例如:

try:
    r = os.environ['Var1']
except KeyError as error:
    print('Var1 not found')

try:
    r = os.environ['Var2']
except KeyError as error:
    print('Var2 not found')

所以,它会检查它们。但我需要Var1Var2

首次尝试/之后添加if/else,如果没有,请检查if r:第二个try/except来电?威尔看起来很恶心......

4 个答案:

答案 0 :(得分:4)

os.environ是一个字典,因此您可以使用默认值.get调用它。

如果你同时使用两个.get调用,那么这将获得第一个变量,如果它存在(因为python短路),否则它会得到你的第二个。

基本上,代码简化为:

r = os.environ.get('Var1', "") or os.environ.get('Var2', "")

在这种情况下,不需要try - except块。

链接这个稍微长一点,你可以得到也会给出默认值的表达式:

>>> r = os.environ.get('Var1', "") or os.environ.get('Var2', "") or (
    "Neither Var1 nor Var2 not found")

答案 1 :(得分:1)

如何使用for循环?

for varname in ['Var1', 'Var2']:
    try:
        r = os.environ['Var1']
        break
    except KeyError as error:
        print('{} not found'.format(varname))

答案 2 :(得分:1)

完全相当于已知变量的if/elif但对于环境变量)将是:

from os import environ

if environ.get("VAR1"):
    print('VAR1 found')
elif environ.get("VAR2"):
    print('VAR2 found')
else:
    print('Neither VAR1 nor VAR2 not found')

由于os.environdictdict.get的签名为dict.get(key, [default]),其中default默认为None,您可以利用此优势并获取None返回不存在的密钥(评估False ly )。

答案 3 :(得分:0)

您可以嵌套try语句

try:
    r = os.environ['Var1']

    try:
        r = os.environ['Var2']
    except KeyError as error:
        print('Var2 not found')

except KeyError as error:
    print('Var1 not found')