【问题标题】:Can insertion in dictionary cause KeyError?插入字典会导致 KeyError 吗?
【发布时间】:2015-10-04 15:15:12
【问题描述】:

这段代码会产生 KeyError 吗?我是 python 新手,只是想澄清一下,因为我检查了插入不会导致 KeyError 异常。

def add(self, name, company):
    try:
        self.identity[self.id] = { 'name': name,
                                   'company': company }
        return self.identity
    except KeyError:
        raise NameNotAdded

这里 identity 是字典,id 是在其他地方初始化的 int,NameNotAdded 是自定义异常。

【问题讨论】:

  • 没有。 KeyError 只能在查找时出现,不能在赋值时出现。

标签: python exception-handling keyerror


【解决方案1】:

在这种情况下,没有任何理由抛出关于 KeyError 的异常。

KeyError 通常表示密钥不存在。在您的情况下,您只需在字典中添加一个新键。

【讨论】:

    【解决方案2】:

    插入永远不会引发KeyError,但如果您提供了错误的密钥,它可以引发TypeError,这通常意味着您正在尝试使用可变对象作为密钥。 Python 整数是不可变的,因此它们不会引发TypeError

    请注意,如果您尝试向您的dict 添加太多项目,您将得到一个MemoryError,因为缺少可用内存,或者一个OverflowError,因为您试图超过集合的最大大小(可以从sys.maxsize 读取)。但费心去捕捉这些并没有多大意义。 :)

    【讨论】:

    • 一个坏密钥不会导致 KeyError;这将是一个 TypeError。
    猜你喜欢
    • 2020-09-21
    • 2016-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多