不中断的异常处理,Python

2024-05-16 19:23:42 发布

您现在位置:Python中文网/ 问答频道 /正文

这可能是一个非常基本的问题,但是我查看了python文档中关于异常的内容,却找不到它。你知道吗

我试着从一本字典中读取一组特定的值,并将这些值的片段插入另一本字典中。你知道吗

for item in old_dicts:
    try:
        new_dict['key1'] = item['dog1'][0:5]
        new_dict['key2'] = item['dog2'][0:10]
        new_dict['key3'] = item['dog3'][0:3]
        new_dict['key4'] = item['dog4'][3:11]
    except KeyError:
        pass

现在,如果Python在['dog1']处遇到一个键错误,它似乎会中止当前迭代并转到旧目录中的下一项。我希望它转到循环的下一行。是否必须为每行插入异常指令?你知道吗


Tags: in文档内容newfor字典itemold
3条回答

假设您知道键中的值是有效的,为什么不一起放弃异常并检查键呢?你知道吗

for item in old_dicts:
    if 'dog1' in item:
        new_dict['key1'] = item['dog1'][0:5]
    if 'dog2' in item:
        new_dict['key2'] = item['dog2'][0:10]
    if 'dog3' in item:
        new_dict['key3'] = item['dog3'][0:3]
    if 'dog4' in item:
        new_dict['key4'] = item['dog4'][3:11]

使其成为函数:

def newdog(self, key, dog, a, b)
    try:
        new_dict[key] = item[dog][a:b]  
    except KeyError:
        pass

我没有运行上面的代码,但类似的东西应该可以工作,模块化。或者,您可以做的是准备让它检查所有值并删除字典中不存在的所有值,但这可能比每行的异常代码更多。你知道吗

for item in old_dicts:
    for i, (start, stop) in enumerate([(0,5), (0,10), (0,3), (3,11)], 1):
        try:
            new_dict['key' + str(i)] = item['dog' + str(i)][start:stop]
        except KeyError:
            pass

相关问题 更多 >