首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >字典KeyError

字典KeyError
EN

Stack Overflow用户
提问于 2013-10-23 20:50:15
回答 1查看 2.5K关注 0票数 1

我有以下代码:

代码语言:javascript
复制
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))

当我使用它来尝试定位一个记录时,我会得到以下输出:

代码语言:javascript
复制
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,我不知道为什么。有人能指点我吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-23 20:54:52

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

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

简单的修复方法是跳过data,如果它是空的,或者只有空格,或者record是空的。更健壮的修复方法是避免使用[]语法,当您无法确定每个dict实际拥有哪些键时;使用record.get('Name', None)代替。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19552009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档