Python dict.get(' key')与dict [' key']

时间:2015-05-21 02:28:46

标签: python dictionary descriptor keyerror

为什么会引发KeyError:

d = dict()
d['xyz']

但这不是吗?

d = dict()
d.get('xyz')

如果描述符在这里起作用,我也很好奇。

4 个答案:

答案 0 :(得分:17)

这就是get()方法的定义方式。

来自the Python docs

  

如果key在字典中,则返回key的值,否则返回default。如果未给出default,则默认为None,因此此方法永远不会引发KeyError。

默认的“未找到”返回值为None。您可以返回任何其他默认值。

d = dict()
d.get('xyz', 42)  # returns 42

答案 1 :(得分:3)

按括号进行访问没有默认值,但get方法有,默认值为None。来自get的文档(通过a = dict(); help(a.get)

Help on built-in function get:

get(...)
    D.get(k[,d]) -> D[k] if k in D, else d.  d defaults to None.

答案 2 :(得分:1)

仅仅因为[1]键不在地图中,[2]这两个操作本质上是不同的。

来自dict地图类型:

d[key]

用钥匙键返回d项。如果键不在地图中,则引发KeyError。

get(key[, default])

如果key在字典中,则返回key的值,否则返回default。如果未给出default,则默认为None,因此此方法永远不会引发KeyError。

答案 3 :(得分:1)

我相信你的开场问题得到了很好的回答,但我没有看到对

的任何回应
  

如果描述符在这里起作用,我也很好奇。

从技术上讲,描述符在这里起作用,因为所有方法都是用描述符隐式实现的,但是没有使用明确的显式描述符,它们与你的行为无关# 39;重新质疑。