需要减少 try 和 except 语句
Need to reduce try and except statements
我有这段代码(下)。我在 json 文件中有数据,我获取数据(下面的代码)。我压缩这些值并将它们写入 csv 文件。
我的问题是,如果 try
中不存在任何值,我想为该值放置一个 'None' 。我尝试过的(我认为是蹩脚的)-> 我添加了尝试,除了我在下面获取的每个值。我需要帮助才能更好地写这篇文章。
异常告诉我缺少什么值。例如,缺少 code
。那么如何在 except
中处理这个问题并将 None
用于 code
?
for i in range(len(res_1)):
try:
gp_code.append(res_1[i]['metadata']['annotations']['code'])
ticket.append(res_1[i]['metadata']['annotations']['ticket'])
node.append(res_1[i]['metadata']['annotations']['node-selector'])
display_name.append(res_1[i]['metadata']['name'])
status.append(res_1[i]['status']['phase'])
timer.append(res_1[i]['metadata']['creationTimestamp'])
lifetime.append(res_1[i]['metadata']['annotations']['lifetime'])
except Exception as e:
print(e)
您可以使用具有适当默认值的 get
并避免异常处理:
for x in res_1:
gp_code.append(x.get('metadata', {}).get('annotations', {}).get('code', None)
# ...
或者您可以将 exception/default 值处理放在一个函数中:
def _append(lst, obj, *items):
try:
for item in items:
obj = obj[item]
lst.append(obj)
except KeyError:
lst.append(None)
for x in res_1:
_append(gp_code, x, 'metadata', 'annotations', 'code')
# ...
我有这段代码(下)。我在 json 文件中有数据,我获取数据(下面的代码)。我压缩这些值并将它们写入 csv 文件。
我的问题是,如果 try
中不存在任何值,我想为该值放置一个 'None' 。我尝试过的(我认为是蹩脚的)-> 我添加了尝试,除了我在下面获取的每个值。我需要帮助才能更好地写这篇文章。
异常告诉我缺少什么值。例如,缺少 code
。那么如何在 except
中处理这个问题并将 None
用于 code
?
for i in range(len(res_1)):
try:
gp_code.append(res_1[i]['metadata']['annotations']['code'])
ticket.append(res_1[i]['metadata']['annotations']['ticket'])
node.append(res_1[i]['metadata']['annotations']['node-selector'])
display_name.append(res_1[i]['metadata']['name'])
status.append(res_1[i]['status']['phase'])
timer.append(res_1[i]['metadata']['creationTimestamp'])
lifetime.append(res_1[i]['metadata']['annotations']['lifetime'])
except Exception as e:
print(e)
您可以使用具有适当默认值的 get
并避免异常处理:
for x in res_1:
gp_code.append(x.get('metadata', {}).get('annotations', {}).get('code', None)
# ...
或者您可以将 exception/default 值处理放在一个函数中:
def _append(lst, obj, *items):
try:
for item in items:
obj = obj[item]
lst.append(obj)
except KeyError:
lst.append(None)
for x in res_1:
_append(gp_code, x, 'metadata', 'annotations', 'code')
# ...