为什么有些语言在键不在字典中时返回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.