数次(甚至连续数次),我都被defaultdict错误咬住了:忘记实际上是defaultdict的东西,然后将其当作普通字典一样对待。

d = defaultdict(list)

...

try:
  v = d["key"]
except KeyError:
  print "Sorry, no dice!"

对于那些也被咬过的人来说,问题很明显:当d没有键“key”时,v = d["key"]神奇地创建一个空列表并将其分配给d["key"]v而不是引发异常。如果d来自某个模块,而该模块的详细信息人们可能不太记得,那将是很难找到的。

我正在寻找一种方法来消除此错误。对我来说,最好的解决方案是在将defaultdict的魔术返回给客户端之前,以某种方式禁用它。

最佳答案

您可以通过分配d.default_factory = None来防止创建默认值。但是,我不太喜欢对象突然改变行为的想法。我更喜欢将值复制到新的dict,除非这样做会严重影响性能。

关于python - 如何使defaultdict对不期望的客户安全?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3031817/

10-16 04:18