我有以下代码在以下代码的条形码循环部分抛出了超出范围的错误。
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"
非常感谢您的帮助!
答案 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')