测试为None会抛出属性不存在的错误

时间:2017-11-06 21:30:27

标签: python

----> 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条记录。

3 个答案:

答案 0 :(得分:3)

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

    if hasattr(person, "network") : 

答案 1 :(得分:3)

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

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

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

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

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

答案 2 :(得分:-1)

你的问题是一个典型的例子,要求宽恕比要求许可更容易。'

我建议使用getattr()

getattr(class, 'attribute', foo)

如果该属性不存在,则返回foo。