除尝试在Python中写行外,请尝试并除外

时间:2020-06-14 16:54:35

标签: python json csv for-loop exception

我有以下代码在以下代码的条形码循环部分抛出了超出范围的错误。

for each in data['articles']:
         f.writerow([each['local']['name'],
         each['information'][0]['barcodes'][0]['barcode']])

我写了一个try,除了当我解析的json中不存在条形码时捕获并处理,这在使用打印功能的测试过程中非常有效,但是我在尝试时遇到了一些麻烦,除了在试图写到一个CSV文件。

有人对我有任何建议或其他方法,我可以尝试使其工作。

在尝试使用打印测试时,我的尝试和接受如下:

   for each in data['articles']:
          print(each['local']['name'])
          try:
                print(each['information'][0]['barcodes'][0]['barcode'])
          except: 
                "none"

非常感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

正如komatiraju032所指出的,一种实现方法是通过from operator import getitem from typing import (List, Sequence, TypeVar) from hypothesis import strategies from hypothesis.strategies import SearchStrategy Element = TypeVar('Element') def sub_lists(sequence: Sequence[Element]) -> SearchStrategy[List[Element]]: return strategies.builds(getitem, strategies.permutations(sequence), strategies.slices(max(len(sequence), 1))) ,尽管如果字典中的其他元素可能具有空值/不正确的值,则为每个提供默认值可能会很麻烦。要通过get()执行此操作,您可以执行以下操作:

try/except

这将为您提供for each in data['articles']: row = [each['local']['name']] try: row.append(each['information'][0]['barcodes'][0]['barcode']) except (IndexError, KeyError): row.append("none") f.writerow(row) 替换值,而不管这些列表/字典中的哪个缺少请求的索引/键,因为这些查找中的任何一个都可能"none",但它们都将以相同的raise

答案 1 :(得分:0)

使用dict.get()方法。如果密钥不存在,它将返回None

res = each['information'][0]['barcodes'][0].get('barcode')