为什么"他们"选择提出例外?

时间:2014-09-18 10:26:08

标签: python exception exception-handling standard-library

我正在阅读hasattr built-in function

  

参数是一个对象和一个字符串。如果是,则结果为True   string是对象属性之一的名称,否则为False。   (这是通过调用getattr(object,name)和查看来实现的   它是否引发了AttributeError。

强调我的。

我无法检查getattr函数是否会引发AttributeError,因为搜索属性本身会明显加快(如果引发异常的话) )。

当我使用标准库时,我希望它以最好的方式编写。在这种情况下,提出异常是否真的是实现hasattr的最佳方式?

2 个答案:

答案 0 :(得分:1)

您无法始终搜索该属性;如果对象实现动态__getattr__ hook,或者覆盖__getattribute__

验证属性的唯一可靠方法是使用getattr()

答案 1 :(得分:0)

该类可以覆盖__getattr__()__getattribute__()来显示__dict__中不存在的属性。

为了与getattr()保持一致,hasattr()需要了解这些属性。实现这一目标的一种简单但通用的方法是调用getattr()并查看是否成功。