1

我有以下代码:

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,我不知道为什么。任何人都可以启发我吗?

4

1 回答 1

4

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

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

简单的解决方法是跳过dataif 它是空的,或者只有空格,或者 ifrecord是空的。[]更强大的解决方法是在您无法确定每个 dict 实际具有哪些键时避免使用语法;改为使用record.get('Name', None)

于 2013-10-23T20:54:52.670 回答