Python字符串在可能的None value上拆分

2024-10-01 17:39:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在构建一个json,我想将一个逗号分隔的列表ID拆分成ID数组,并放入json中。问题是列表在数据库中也可以为NULL,因此在python中没有

部分代码如下:

'followupsteps': [{
    'id': stepid,
} for stepid in string.split(step.followupsteps, ',') 

我试过了:

^{pr2}$

以及

'followupsteps': [{
    'id': stepid,
} for stepid in string.split((step.followupsteps if not None else ''), ',')]

它们都会导致Django/python错误: 异常值: “NoneType”对象没有属性“split”

有什么想法吗?在


Tags: inid数据库json列表forstringstep
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)。在

您想测试step.followupsteps是否为布尔值真:

'followupsteps': [] if not step.followupsteps else [{
    'id': stepid,
} for stepid in step.followupsteps.split(',')]

相反,您将测试not None是否为真,它恰好是:

^{pr2}$

如果是空字符串、None、数字0或空容器,not step.followupsteps将为True。您也可以使用if step.followupsteps is None,但为什么要限制自己呢。在

另一种拼写方法:

'followupsteps': [{
    'id': stepid,
} for stepid in (step.followupsteps.split(',') if step.followupsteps else [])]

但是只要先返回一个空列表,就完全避免了对空列表的理解。在

相关问题 更多 >

    热门问题