【问题标题】:Check multiples hasattr in the same condition检查相同条件下的多个 hasattr
【发布时间】:2013-12-30 20:33:30
【问题描述】:
if hasattr(form, 'name') and hasattr(form, 'date'):
   print(form.name) #'Some name' - True
   print(form.date) #none - False

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

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

【问题讨论】:

  • 请注意,hasattr 纯粹检查是否存在。如果它存在但它是假的,它仍然是真的。您可能需要getattr 的形式,但还要仔细检查您不是指form.name 而不仅仅是name...

标签: python hasattr


【解决方案1】:

您可以使用all

if all(hasattr(form, attr) for attr in ["name", "date"])

【讨论】:

  • 这很方便:any(hasattr(form, attr) for attr in ["name", "date"])
【解决方案2】:

你看到的可能不是hasattr,而是getattr

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

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

希望这会有所帮助!

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

      if all(getattr(form, attrib) for attrib in ["name", "date"]):
          ....
      

      【讨论】:

        【解决方案5】:

        尝试使用 getattr:

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

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

        【讨论】:

          【解决方案6】:

          你的情况很好。您对以下变量的使用可能不是——我认为您的意思是使用 form.nameform.date

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

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

          【讨论】:

            猜你喜欢
            • 2019-02-09
            • 1970-01-01
            • 2016-10-31
            • 1970-01-01
            • 1970-01-01
            • 2022-11-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多