5
爲什麼hasattr
說實例沒有foo
屬性?Python的hasattr有時會返回不正確的結果
>>> class A(object):
... @property
... def foo(self):
... ErrorErrorError
...
>>> a = A()
>>> hasattr(a, 'foo')
False
我預計:
>>> hasattr(a, 'foo')
NameError: name 'ErrorErrorError' is not defined`
儘管有來自Python文檔的引用,'hasattr'行爲仍然可能被認爲是奇怪的。確實,屬性內部的任意異常不再導致該屬性被認爲是不存在的(而是在調用者的臉上被引發),但是如果AttributeError來自屬性內的某個地方,hasattr的結果仍然會是'假'。這可能不是故意的。 (或者它可能,所以一個屬性可以確定它是否想要「在那裏」。)在任何情況下,首先執行屬性聽起來都是錯誤的,考慮到副作用等。 –
沒有真正的直接方法以確定屬性獲取機制本身或屬性中的代碼是否引發了'AttributeError'。 – kindall