【发布时间】:2015-05-31 04:26:21
【问题描述】:
使用以下内容本质上是不是不好的做法“如果dict和key存在,添加一个项目,如果不存在,先创建dict和key然后添加到它”?
附加问题:我是否必须在实例化时执行self.elements = {} 才能使第一个添加项起作用,还是它会使用第一个self.elements[elemType] = ... 即时创建它?
它在控制台中有效,但我确定我之前在此操作时遇到过错误。
try:
self.elements[elemType][elemObj.id] = elemObj
except KeyError as _:
self.elements[elemType] = {elemObj.id:elemObj}
【问题讨论】:
-
不,这很好,但您通常不会在程序开始时创建一个空字典作为占位符吗?
-
我认为这很好,但是您可能需要考虑使用
defaultdict类来完全避免 -
另外,如果您不打算使用
Exception实例,except KeyError:也可以。 -
这样做的问题是您最终可能会捕获并掩盖您没有预料到的关键错误。
-
我认为 defaultdict 在这里不合适。元素字典只是在添加元素时从广播中接收元素,它们可以是 zwave 节点、android 相机等(这是一个家庭安全系统)——这个字典在我的 gui 中,旨在捕获通过添加到系统中的元素发布者广播并从中制作按钮以添加到 gui。我不想让它知道它可以接收什么类型,只是它可以接收它们。使用默认字典,我必须定义键和默认值,对吗?
标签: python exception dictionary exception-handling variable-assignment