关于python:测试none会引发错误属性不存在

Testing for None throws an error the attribute doesn't exist

本问题已经有最佳答案,请猛点这里访问。
1
2
3
4
5
----> 1 if person.network is None:
      2     print('person.network does not exist')
      3

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

正如你在第1行看到的,我正在检查"网络"是否存在。但是,当它不存在时,它会失败并抛出一个python错误。我有点迷茫这是怎么回事。第一行不应该抓住这个确切的问题吗?

当其中一个没有定义"网络"时,实际代码在失败之前会正确地通过大约10个记录。


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

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

如果需要检索值,可以使用getattr()安全地检索:

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

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


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

1
    if hasattr(person,"network") :


你的问题是"请求宽恕比请求许可更容易"的典型例子。

我建议使用getattr()。

1
getattr(class, 'attribute', foo)

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