即使有对象,Python .get()也不会计算为True?

时间:2012-02-17 11:40:19

标签: python pylons

我正在经营一个Pylons项目并遇到了这个奇怪的问题。提交表单时,我可以选择添加徽标(简单.png)。徽标在FieldStorage实例中传递。我尝试评估徽标是否与此一起发送:

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

我不明白为什么会有效,第一个例子没有。

2 个答案:

答案 0 :(得分:5)

这很有趣,不知怎的,FieldStorage对象解析为false。

编写以下内容(更简单一点)是完全合法的:

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

答案 1 :(得分:3)

使用request.params.get('logo'),您将获得一个FieldStorage对象,无论如何都可能评估为False

无论如何,你只是测试字典中'logo'键的存在性。你为什么不使用字典语义?没有检查过,但我想它支持的内容如下:

if 'logo' in request.params:
    do x

编辑:看了一下代码。 UnicodeMultiDictUserDict.DictMixin的子类,因此它实现__contains__并支持我的建议。