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

can*_*dry 0 python

我的意图是d即使key缺少项目(标识为),也有一个默认值adict.

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

# use d ...
Run Code Online (Sandbox Code Playgroud)

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

ick*_*fay 5

这可能会更好:

d = (adict.get('key') or QueryDict('')).copy()
Run Code Online (Sandbox Code Playgroud)

但是,这可能并不明显,所以这可能更可取:

if 'key' in adict and adict['key'] is not None:
    d = adict['key'].copy()
else:
    d = QueryDict('')
Run Code Online (Sandbox Code Playgroud)


srg*_*erg 5

你可以使用:

d = adict.get('key', QueryDict('')).copy()
Run Code Online (Sandbox Code Playgroud)

这就赋予d的价值adict[key],如果在字典中存在的关键,或者如果没有,则d获取QueryDict('')它的价值.

或者,您可以使用

d = adict.setdefault('key', QueryDict('')).copy()
Run Code Online (Sandbox Code Playgroud)

这也指定了密钥是否存在d的值adict[key],但是如果密钥不存在,则为其adict[key]分配值QueryDict('')并将该值赋值给d.

查看docs.python.org上的词典文档.