这是用于检查None(s)的惯用python吗?

时间:2011-12-06 05:16:28

标签: python

我的目的是为d设置默认值,即使key中缺少项目(由adict标识)。

d = QueryDict('')
try:
    if adict['key'] is not None:
        d = adict['key'].copy()
except KeyError:
    pass

# use d ...

我对使用该异常处理程序感到畏缩。我是否违反了任何python代码样式?

5 个答案:

答案 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()

Available as of Python 2.2

答案 3 :(得分:1)

这比在try catch中包装代码要简洁得多。

d = QueryDict('')
if 'key' in adict and adict['key'] is not None:
    d = adict['key'].copy()

答案 4 :(得分:1)

我在http://docs.python.org/

中找不到QueryDict

来自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']