迭代字典时处理异常

时间:2016-03-10 17:39:51

标签: python dictionary exception-handling

我正在搜索文本以提取一些数据,我需要在没有找到任何内容时处理这个案例:

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

因为在最后一种情况下,如果只有一个搜索失败,我将丢失所有数据,但我重复了很多代码。

编辑。

我的预期结果是大多数项目都是dictonary。

例如:if:

item_1是地址
 item_2是名称
 item_3是一个calification

如果在搜索地址时发生异常,我仍然希望能够获得名称和校准。我也不想处理异常,所以如果需要我可以发出“未找到”这样的消息

1 个答案:

答案 0 :(得分:1)

我认为避免重复代码的方法是使用循环。首先,将您的字典键和正则表达式对打包成可迭代的东西,然后循环对。这是使用字典作为键和正则表达式的看法(但是2元组的列表也可以正常工作):

key_regex_dict = {'item_1': 'regex_1', 'item_2': 'regex_2', 'item_3': 'regex_3'}
for i, data in enumerate(some_text):
    for key, regex in key_regex_dict.items():
        try:
            items[key][i] = re.findall(regex, data)[0]
        except IndexError:
            pass