我需要检查一个或另一个环境变量。
随意变量 - 我可以使用:
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')
所以,它会检查它们。但我需要Var1
或Var2
。
首次尝试/之后添加if/else
,如果没有,请检查if r:
第二个try/except
来电?威尔看起来很恶心......
答案 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.environ
是dict
且dict.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')