2013-08-09 3 views
0

json을 만들고 있는데 쉼표로 구분 된 목록 ID를 ID 배열에 분할하고 json에 넣고 싶습니다.파이썬 문자열 분할 가능 가능 없음 값

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

: 내가 좋아하는 일을 시도

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

: 문제는 목록도 따라서 파이썬 없음

코드의 일부처럼 보이는없는 데이터베이스에 NULL이 될 수 있다는 것입니다

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

모두 Django/python 오류가 발생합니다. 예외 값 : 'NoneType'개체에 'split'속성이 없습니다.

아이디어가 있습니까?

if not None: 
    step.followupsteps 
else: 
    '' 

not None 항상 True로 평가, 그래서 이것은 if/else 문을 전혀 작성하지 동일합니다 :

+0

루프 이전에 변수가 '없음'인지 여부를 확인할 수있는 방법이 있습니까? – darthbith

답변

6

당신은 테스트 할 :

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

not None는 그냥 그렇게 될 일이있는 해당하는 경우 대신 테스트 :

not step.followupsteps

>>> bool(not None) 
True 
는에 가고 빈 문자열 인 경우 None, 숫자 0 또는 빈 컨테이너이면 True입니다. if step.followupsteps is None을 사용할 수도 있지만 자신을 제한하는 이유는 무엇입니까?

맞춤법이의 또 다른 방법 :

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

그러나 다만 먼저 모두 빈 지능형리스트를 피하기 빈 목록을 반환하여

.

+0

@JonClements : 빈 문자열이 하나있는 목록을 반환합니다. 당신은'[] '대신에'[{'id ':' '}]'로 끝납니다. –

2

귀하의 원 문에 확장합니다.

None 인 객체의 '허위'를 이용하여 (thing to evaluate) if step.followupsteps else (default thing)을 작성하고 싶습니다. 또는 더 편리하면 (default thing) if not step.followupsteps else (thing to evaluate)입니다. step.followupsteps 대신 부울에 해당하는 경우