我正在构建一个json,我想在ID的数组中分割逗号分隔列表ID并放入json中。问题是列表在数据库中也可以是NULL,因此在python
中是None部分代码如下:
'followupsteps': [{
'id': stepid,
} for stepid in string.split(step.followupsteps, ',')
我尝试过这样的事情:
'followupsteps': [{
'id': stepid,
} for stepid in (string.split(step.followupsteps, ',') if not None else [])]
和
'followupsteps': [{
'id': stepid,
} for stepid in string.split((step.followupsteps if not None else ''), ',')]
它们都导致Django / python错误: 例外价值: 'NoneType'对象没有属性'split'
任何想法?
答案 0 :(得分:6)
您想测试step.followupsteps
是否为布尔值true:
'followupsteps': [] if not step.followupsteps else [{
'id': stepid,
} for stepid in step.followupsteps.split(',')]
您正在测试not None
是否为True,恰好是:
>>> bool(not None)
True
如果 not step.followupsteps
是空字符串None
,数字0或空容器,则它将为True。您也可以使用if step.followupsteps is None
,但为什么要限制自己。
另一种拼写方式:
'followupsteps': [{
'id': stepid,
} for stepid in (step.followupsteps.split(',') if step.followupsteps else [])]
但是首先只返回一个空列表,你就完全避免了空列表理解。
答案 1 :(得分:2)
您的三元声明扩展为:
if not None:
step.followupsteps
else:
''
not None
始终评估为True
,因此这相当于根本不写if/else
语句。
你想写(thing to evaluate) if step.followupsteps else (default thing)
,利用None
对象的'虚假'。或者,如果它更方便,(default thing) if not step.followupsteps else (thing to evaluate)
。