2012-02-17 86 views
4

我正在運行一個Pylons項目並遇到了這個奇怪的問題。提交表單時,我可以選擇添加徽標(簡單的.png)。徽標被傳入FieldStorage實例中。我試圖評估該標誌與此發送:即使存在對象,Python.get()也不會計算爲True?

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

然而,結果始終爲假,即使有標誌。如果我打印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'))''返回什麼? – 2012-02-17 11:45:06

+1

這不能回答你的問題,但根據pep8你應該使用「is None」而不是「== None」。請參閱此處瞭解更多信息:http://lars.berkscan.com/q/100732/1205715 – jbowes 2012-02-17 11:53:03

+0

@larsmans它返回False。 – datacarl 2012-02-17 12:23:12

回答

5

這很有趣,不知何故FieldStorage對象解析爲false。

這是完全合法的編寫以下(簡單一點):

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

葉普這漂亮。 – datacarl 2012-02-17 12:43:51

3

隨着request.params.get('logo')你得到一個FieldStorage對象,這可能評估爲False,不管是什麼。

無論如何,你只是測試字典中存在的'logo'鍵。你爲什麼不使用字典語義呢?沒有檢查,但我想它支持類似:

if 'logo' in request.params: 
    do x 

編輯:看看代碼。 UnicodeMultiDictUserDict.DictMixin的子類,所以它實現了__contains__並支持我所建議的。

+0

是的,這工作得很好。但是,我看不到FieldStorage評估爲False的邏輯。 – datacarl 2012-02-17 12:45:56

+0

去圖。雖然'FieldStorage'應該是一個通用存儲器,並且只要在計算布爾值時沒有定義它的行爲,我就不需要遵循某個邏輯。 – 2012-02-17 14:17:19

相關問題