我有以下代码:
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,我不知道为什么。谁能开导我?
答案 0 :(得分:4)
打印出正确的数据,然后继续运行并在以后的数据上引发KeyError
。
您的文件最有可能以------
字符串结尾,因此您的split
会在最后生成一个空字符串的列表,然后生成一个空字典,这自然没有任何字符串钥匙在里面。
简单修复就是跳过data
,如果它是空的,或只是空格,或者record
为空。更强大的修复是当你无法确定每个dict实际拥有哪些键时,避免使用[]
语法;请改用record.get('Name', None)
。