【发布时间】:2014-09-26 17:32:54
【问题描述】:
我刚刚遇到了意外的行为。这是一个简单的类,其中包含一个 __getattr__ 方法和一个带有错字的属性:
class A(object):
def __getattr__(self, attr):
if not attr.startswith("ignore_"):
raise AttributeError(attr)
@property
def prop(self):
return self.some_typo
a = A() # Instantiating
a.ignore_this # This is ignored
a.prop # This raises an Attribute Error
这是预期的结果(如果__getattr__ 被评论,我得到的结果):
AttributeError: 'A' object has no attribute 'some_typo'
这就是我得到的:
AttributeError: prop
我知道这与__getattr__ 捕获AttributeError 有关,但是对于这个问题有没有一个好的和干净的解决方法?因为我可以向你保证,这是一场调试噩梦......
【问题讨论】:
-
你的意思是真的“我怎样才能
raise更好的错误信息”?另外,请记住a.prop调用a.__getattr__('prop'),它(如果它没有引发错误)会依次调用a.__getattr__('some_typo')- 你希望错误来自哪里? -
更多的是不引发错误的错误信息。
-
为什么你认为错误信息是错误的?调用
__getattr__来解析prop。 -
为什么要调用 getattr 来解析@property?
标签: python properties