【问题标题】:Testing for None throws an error the attribute doesn't exist [duplicate]测试无会引发属性不存在的错误[重复]
【发布时间】:2018-04-19 03:50:09
【问题描述】:
----> 1 if person.network is None:
      2     print('person.network does not exist')
      3 

AttributeError: 'Person' object has no attribute 'network'

正如您在第 1 行看到的,我正在检查“网络”是否不存在。但是,当它不存在时,它会失败并引发 python 错误。我对这是如何发生的有点迷茫。第 1 行不应该抓住这个确切的问题吗?

当其中一条没有定义“网络”时,实际代码正确地检查了大约 10 条记录,然后失败。

【问题讨论】:

  • 不存在的属性与设置为无的属性不同。
  • 你可能正在寻找类似this的东西。
  • 使用hasattr()
  • 听起来像是与您的特定代码相关的数据相关问题。您需要提供更多上下文来调试错误实例引发异常的原因。

标签: python


【解决方案1】:

你可以使用内置的python函数hasattr:

    if hasattr(person, "network") : 

【讨论】:

    【解决方案2】:

    具有None 值的实例属性与根本不存在(您的情况)之间存在差异。要正确检查实例属性是否存在,可以使用hasattr() 方法:

    if hasattr(person, "network"):
        # do stuff
    

    如果您需要检索该值,可以使用getattr() 安全地执行此操作:

    network = getattr(person, "network", None)
    

    最后一个参数是在person没有network属性的情况下返回的默认值。

    【讨论】:

    • 非常感谢您的澄清!
    猜你喜欢
    • 2012-08-04
    • 1970-01-01
    • 2018-05-07
    • 2020-11-15
    • 2016-07-02
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    • 2018-06-08
    相关资源
    最近更新 更多