Python字符串拆分可能的无值

时间:2013-08-09 15:32:00

标签: python django string split nonetype

我正在构建一个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'

任何想法?

2 个答案:

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