为什么有些语言在键不在字典中时返回nil,而Python抛出异常?

为什么有些语言在键不在字典中时返回nil,而Python抛出异常?,python,programming-languages,Python,Programming Languages,我有兴趣了解以下行为背后的基本原理: 红宝石色 irb(main):003:0> dic = {:a => 1, :b => 2} => {:a=>1, :b=>2} irb(main):004:0> dic[:c] => nil 在Javascript中: > var dic = {a: 1, b: 2}; undefined > dic['c'] undefined Clojure: user=> (def dic {:a

我有兴趣了解以下行为背后的基本原理:

红宝石色

irb(main):003:0> dic = {:a => 1, :b => 2}
=> {:a=>1, :b=>2}
irb(main):004:0> dic[:c]
=> nil
在Javascript中:

> var dic = {a: 1, b: 2};
undefined
> dic['c']
undefined
Clojure:

user=> (def dic {:a 1 :b 2})
#'user/dic
user=> (:c dic)
nil
使用Python时:

>>> dic = {'a': 1, 'b': 2}
>>> dic['c']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'c'
dic={'a':1,'b':2} >>>dic['c'] 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 键错误:“c” 我想知道为什么Python的(默认)行为是引发异常,而不是像上面列出的其他语言那样返回某种形式的
nil
。我在中没有看到答案(我想一个类似的问题是,为什么其他语言会这样做,但Python在这方面似乎是个怪人。)

来自Python的禅宗(
导入此
):

也就是说,未找到的密钥将被视为错误,除非您明确地为其编码,例如通过捕获
KeyError
或使用
dict.get(key,default)
方法

Python被明确地设计为在这方面和(大多数)其他方面都非常明确。

(请求原谅比允许更容易):

这种常见的Python编码风格假定存在有效键属性并在假设被证明为错误时捕获异常。这 简洁快速的风格的特点是有许多
try
语句除外。这项技术与LBYL风格的普通设计形成对比
许多其他语言,如C


显式比隐式好。您如何区分字典中没有的密钥和与
nil
关联的密钥?如果您想要相同的行为,请使用
dic.get('c')
。这也是因为。。。不同的语言是不同的。好吧,我喜欢Python。我的直接反应是“在那种情况下,哪种语言(除了Javascript)愚蠢到可以返回nil?”现在我知道了。
 Errors should never pass silently.
 Unless explicitly silenced.