我正在努力與__getattr__
。我有一個複雜的遞歸代碼庫,讓異常傳播很重要。Python:爲什麼__getattr__捕獲AttributeErrors?
class A(object):
@property
def a(self):
raise AttributeError('lala')
def __getattr__(self, name):
print('attr: ', name)
return 1
print(A().a)
結果:
('attr: ', 'a')
1
爲什麼這種行爲?爲什麼沒有拋出異常?此行爲未記錄(__getattr__
documentation)。 getattr()
只能使用A.__dict__
。有什麼想法嗎?
我會說文檔的失敗在於它聲明'AttributeError'可以在'__get__'中引發(這就是你在這裏實際做的),但並不能解釋它具有什麼效果。它應該說'AttributeError'發信號給python,它應該像沒有找到屬性那樣工作(所以'__getattr__'會像往常一樣嘗試作爲備份) - 如果這不是你想要的行爲,那麼你應該提出其他的東西。 – James