2012-02-17 2 views
4

Pylons 프로젝트를 실행 중이고이 이상한 문제가 발생했습니다. 양식을 제출할 때 로고 (간단한 .png)를 추가 할 수있는 옵션이 있습니다. 로고는 FieldStorage 인스턴스에 전달됩니다. 로고가 다음과 같이 전송되었는지 평가하려고합니다.Python .get()은 객체가 있더라도 True로 평가되지 않습니까?

if request.params.get('logo'): 
    do x 

그러나 로고가있는 경우에도 항상 False로 평가됩니다. request.params를 인쇄하면 UnicodeMultiDict([('logo', FieldStorage('logo', u'tux.png'))])이됩니다.

if not request.params.get('logo') == None: 
    do x 

내가 그 작품과 첫 번째 예제하지 않는 이유를 실패 :

나는 그것을 해결했다.

+0

'bool (FieldStorage ('logo ', u'tux.png'))'return이 무엇입니까? –

+1

이것은 질문에 대답하지 않지만 pep8에 따르면 "== None"대신 "is None"을 사용해야합니다. 자세한 내용은 여기를 참조하십시오. http://stackoverflow.com/q/100732/1205715 – jbowes

+0

@larsmans False를 반환합니다. – datacarl

답변

5

이것은 흥미 롭습니다. 어쨌든 FieldStorage 개체가 false로 해석됩니다.

다음과 같은 (좀 더 쉽게) 작성하는 완벽하게 합법적이다 request.params.get('logo')

if request.params.get('logo') is not None: 
    # do x 
+0

Yepp thats pretty tail. – datacarl

3

당신이 상관없이, 아마 False로 평가되는 FieldStorage 개체를 받고 없습니다 있습니다.

어쨌든 사전에 'logo' 키의 존재 여부 만 테스트하면됩니다. 왜 사전 의미론을 사용하지 않습니까? 확인하지 않았지만 다음과 같은 것을 지원한다고 생각합니다.

편집 : 코드를 살펴보십시오. UnicodeMultiDictUserDict.DictMixin의 하위 클래스이므로 __contains__을 구현하고 제안한 내용을 지원합니다.

+0

네, 잘 작동합니다. 그래도 FieldStorage의 논리가 False로 평가되지는 않습니다. – datacarl

+0

이동하십시오. 'FieldStorage'는 범용 저장소이기 때문에, 부울로 평가할 때 정의 된 동작이 없으면 특정 논리를 따를 필요가 없습니다. –