【发布时间】:2016-06-25 17:05:39
【问题描述】:
我正在搜索文本以提取一些数据,当我什么也没找到时我需要处理这种情况:
items = {'item_1':['----']*len(some_text),
'item_2':['----']*len(some_text),
'item_3':['----']*len(some_text)]
for i, data in enumerate(some_text):
try:
items['item_1'][i] = re.findall('regex_1',data)[0]
except (IndexError):
pass
try:
items['item_2'][i] = re.findall('regex_2',data)[0]
except (IndexError):
pass
try:
items['item_3'][i] = re.findall('regex_2',data)[0]
except (IndexError):
pass
我是这样做的,而不是这样:
for i, data in enumerate(some_text):
try:
items['item_1'][i] = re.findall('regex_1',data)[0]
items['item_2'][i] = re.findall('regex_2',data)[0]
items['item_3'][i] = re.findall('regex_2',data)[0]
except (IndexError):
pass
因为在最后一种情况下,如果只有一个搜索失败,我将丢失所有数据,但我重复了很多代码。
编辑。
我的预期结果是有一个包含大多数项目的字典。
例如,如果:
item_1 是一个地址
item_2 是一个名字
item_3 是校准
如果在搜索地址时发生异常,我仍然希望能够获取名称和校准。我也不想处理异常,所以如果需要我可以输入“未找到”之类的消息
【问题讨论】:
-
为什么没有
regex_3? -
如果任何搜索失败,您是否不希望它失败,或者您是否有理由仍想捕获您可以捕获的任何数据?
-
那么你的问题是什么?如果任何搜索失败,您可能应该解释预期结果应该是什么样子,因为在任一版本的代码中,都不会附加相应的列表,并且下一次迭代将产生
IndexError。 -
我认为 OP 想忽略任何
IndexError并继续执行代码,就好像没有抛出异常一样。 -
但是他需要指定如何构造一个不包含所有元素的列表。要么他需要插入某种空匹配,要么他最终得到长度不可预见的列表,在这种情况下,他不能简单地分配给
[i],而是需要append()。
标签: python dictionary exception-handling