我的目的是为d
设置默认值,即使key
中缺少项目(由adict
标识)。
d = QueryDict('')
try:
if adict['key'] is not None:
d = adict['key'].copy()
except KeyError:
pass
# use d ...
我对使用该异常处理程序感到畏缩。我是否违反了任何python代码样式?
答案 0 :(得分:5)
这可能更好:
d = (adict.get('key') or QueryDict('')).copy()
但这可能并不明显,所以这可能是更可取的:
if 'key' in adict and adict['key'] is not None:
d = adict['key'].copy()
else:
d = QueryDict('')
答案 1 :(得分:5)
你可以使用:
d = adict.get('key', QueryDict('')).copy()
如果密钥存在于字典中,则d
会将adict[key]
的值分配给d
,如果密钥不存在,则QueryDict('')
会将d = adict.setdefault('key', QueryDict('')).copy()
作为其值。< / p>
或者,您可以使用
d
如果密钥存在,这也会adict[key]
分配adict[key]
的值,但如果密钥不存在,则为QueryDict('')
分配值d
,这样值已分配给{{1}}。
查看docs.python.org上的字典文档。
答案 2 :(得分:1)
为什么不:
if key not in adict or adict[key] is None:
d = QueryDict('')
else:
d = adict[key].copy()
答案 3 :(得分:1)
这比在try catch中包装代码要简洁得多。
d = QueryDict('')
if 'key' in adict and adict['key'] is not None:
d = adict['key'].copy()
答案 4 :(得分:1)
来自http://wiki.python.org/moin/KeyError
只要请求dict()对象(使用格式a = adict [key])并且密钥不在字典中,Python就会引发KeyError。如果你不想有异常但宁愿使用默认值,你可以使用get()方法:
default = 'Scruffy'
a = adict.get('dogname', default)
更有用的是有点有争议的setdefault(key,val),只有当它不在dict中时才设置键的值,并在任何情况下都返回该值:
default = 'Scruffy'
dog_owned_by = {'Peter': 'Furry', 'Sally': 'Fluffy'}
dogs = []
for owner in ('Peter', 'Sally', 'Tim'):
dogs.append(dog_owned_by.setdefault(owner, default))
# dogs == ['Furry', 'Fluffy', 'Scruffy']