需要减少try和except语句

时间:2017-11-15 12:11:20

标签: python python-2.7 exception-handling

我有这段代码(下面)。我在json文件中有数据,我获取数据(下面的代码)。我将这些值压缩并将其写入csv文件。 我的问题是,如果try中没有任何值存在,我想提出一个'无'在那边为那个价值。我尝试了什么(我觉得很蹩脚) - >我添加了try,除了我在下面提取的每个值。我需要更好的写作帮助。

Exception告诉我缺少什么价值。例如,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)

1 个答案:

答案 0 :(得分:0)

您可以将get与适当的默认值一起使用,并完全避免异常处理:

for x in res_1:
    gp_code.append(x.get('metadata', {}).get('annotations', {}).get('code', None)
    # ...

或者您可以将异常/默认值处理放在函数中:

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')
    # ...