多次尝试除非值可能不存在
Multiple Try Except when the value may not be present
我需要检查一个或另一个环境变量。
使用随机变量 - 我可以使用:
if var1:
print('Var1 found')
elif var2:
print('Var2 found')
else:
print('Neither Var1 nor Var2 not found')
我怎样才能对环境变量做同样的事情?
我不能使用 if/else
,因为如果没有找到变量 - os.environ
将 raize 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
.
在第一个 try/except 之后添加 if/else
,以检查 if r:
第二个调用 try/except
如果没有?威尔看起来很恶心...
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")
使用 for
循环怎么样?
for varname in ['Var1', 'Var2']:
try:
r = os.environ['Var1']
break
except KeyError as error:
print('{} not found'.format(varname))
您可以嵌套 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')
对于已知变量(但对于环境变量),您的 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
and dict.get
的签名 dict.get(key, [default])
其中 default
默认为 None
你可以利用它并得到 None
返回不存在的键( 计算 False
ly)。
我需要检查一个或另一个环境变量。
使用随机变量 - 我可以使用:
if var1:
print('Var1 found')
elif var2:
print('Var2 found')
else:
print('Neither Var1 nor Var2 not found')
我怎样才能对环境变量做同样的事情?
我不能使用 if/else
,因为如果没有找到变量 - os.environ
将 raize 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
.
在第一个 try/except 之后添加 if/else
,以检查 if r:
第二个调用 try/except
如果没有?威尔看起来很恶心...
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")
使用 for
循环怎么样?
for varname in ['Var1', 'Var2']:
try:
r = os.environ['Var1']
break
except KeyError as error:
print('{} not found'.format(varname))
您可以嵌套 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')
对于已知变量(但对于环境变量),您的 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
and dict.get
的签名 dict.get(key, [default])
其中 default
默认为 None
你可以利用它并得到 None
返回不存在的键( 计算 False
ly)。