1

私は 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 エラーになります: Exception Value: 'NoneType' object has no attribute 'split'

何か案は?

4

2 に答える 2

7

step.followupsteps代わりにブール値が trueかどうかをテストします。

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

代わりに、真かどうかをテストnot Noneしています。これはたまたま次のようになります。

>>> bool(not None)
True

not step.followupstepsNone空の文字列、 、数値の 0、または空のコンテナーの場合は True になります。使用することもできますif step.followupsteps is Noneが、なぜ自分を制限するのですか。

これを綴る別の方法:

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

しかし、最初に空のリストを返すだけで、空のリストの理解を完全に回避できます。

于 2013-08-09T15:35:50.050 に答える
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).

于 2013-08-09T15:35:41.400 に答える