为什么会引发KeyError:
d = dict()
d['xyz']
但这不是吗?
d = dict()
d.get('xyz')
如果描述符在这里起作用,我也很好奇。
答案 0 :(得分:17)
这就是get()
方法的定义方式。
如果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;重新质疑。