2012-02-17 8 views
4

私はPylonsプロジェクトを実行していて、この奇妙な問題に遭遇しました。私はロゴを追加するオプションがあります(単純な.png)フォームを提出するとき。ロゴはFieldStorageインスタンスに渡されます。私はロゴがこれと一緒に送信されたかどうかを評価しようとしています。ロゴがある場合でも、常にFalseと評価されます。 request.paramsを印刷するとUnicodeMultiDict([('logo', FieldStorage('logo', u'tux.png'))])となります。Python .get()はオブジェクトがあってもTrueに評価されません。

私はそれを解決:私はそれが動作し、最初の例にはない理由を見ることができない

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 prettyttier。 – datacarl

3

はあなたがどんな、おそらくFalseに評価FieldStorageオブジェクトを取得していないしています。

とにかく、辞書に'logo'キーの存在をテストしているだけです。なぜそれについて辞書のセマンティクスを使用しないのですか?チェックしていませんが、次のようなものをサポートしていると思います。

編集:コードを見てください。 UnicodeMultiDictUserDict.DictMixinのサブクラスなので、__contains__を実装し、私が提案したものをサポートしています。

+0

はい、うまくいきます。それでも、Falseに評価されたFieldStorageのロジックを見ることはできません。 – datacarl

+0

に移動します。 'FieldStorage'は汎用ストレージであることを意図しています。ブール値に評価するときに定義された動作がない限り、特定のロジックに従う必要はありません。 –

関連する問題