3
if hasattr(form, 'name') and hasattr(form, 'date'):
   print(form.name) #'Some name' - True
   print(form.date) #none - False

即使hasattr(form, 'date')为假,此条件也验证为真。

验证倍数的正确方法是什么hasattr?

4

6 回答 6

16

您可以使用all

if all(hasattr(form, attr) for attr in ["name", "date"])
于 2013-12-12T12:21:41.163 回答
2

您正在寻找的可能不是hasattr,而是getattr

if getattr(form, 'name') and getattr(form, 'date'):

hasattr将检查是否具有form属性。name它将检查是否form.name存在,而不是获取form.name. 是为了那个getattr

希望这可以帮助!

于 2013-12-12T12:22:08.117 回答
1

即使该属性的值为False它仍然具有该属性,这就是它没有失败的原因(正如您所期望的那样)。

hasattr只会检查属性是否存在,而不是它的值是什么。你需要getattr.

于 2013-12-12T12:22:03.200 回答
0

尝试使用 getattr:

if getattr(form, 'name', None) and getattr(form, 'date', None):
    print(name)
    print(date)

getattr(form, 'name', None) - 这个 None 是默认值,如果不是字段

于 2013-12-12T12:22:40.900 回答
0

如果您有多个值来检查它是否是对象的真实属性,则可以这样做

if all(getattr(form, attrib) for attrib in ["name", "date"]):
    ....
于 2013-12-12T12:20:58.307 回答
0

你的条件很好。您对以下变量的使用可能不是-我认为您的意思是使用form.name and form.date

如果您想检查它们是否存在并且它们的值不是 None,请尝试:

if getattr(form, 'name') is not None and getattr(form, 'date') is not None:
    print(form.name)
    print(form.date)
于 2013-12-12T12:23:03.553 回答