我有以下代码:

def search_for_person(name):
    with open("address.txt", "r") as book:
        records = re.split("[-]+", book.read(), re.M)
        for data in records:
            record = get_record(data)
            if record['Name'] == name:
                print record


def get_record(string):
    return dict(re.findall("^(.*): (.*)$", string, re.M))


当我使用它尝试查找记录时,我得到以下输出:

Enter name: Daniel Ghi
{'Home Phone No.': 'Example', 'Mobile Phone No.': 'Example', 'Name': 'Daniel Ghi
', 'Address': 'Example'}
Traceback (most recent call last):
  File "address.py", line 35, in <module>
    search_for_person(name)
  File "address.py", line 18, in search_for_person
    if record['Name'] == name:
KeyError: 'Name'


如您所见,这确实可以打印出正确的数据,但是它仍然带有KeyError,我不确定为什么。谁能启发我?

最佳答案

它会打印出正确的数据,然后继续运行并在以后的数据上引发KeyError

您的文件很可能以------字符串结尾,因此您的split会生成一个列表,该列表的末尾带有一个空字符串,然后生成一个空dict,它自然没有任何键。

简便的解决方法是,如果data为空,或者仅空白,或者record为空,则跳过它。更可靠的解决方案是在不确定每个字典实际具有的键时避免使用[]语法。使用record.get('Name', None)代替。

关于python - 字典KeyError,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19552009/

10-11 17:54