我刚刚遇到了意想不到的行为.这是一个带有__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
Run Code Online (Sandbox Code Playgroud)
这是预期的结果(如果__getattr__被评论,我得到的结果):
AttributeError: 'A' object has no attribute 'some_typo'
Run Code Online (Sandbox Code Playgroud)
这就是我得到的:
AttributeError: prop
Run Code Online (Sandbox Code Playgroud)
我知道这与__getattr__捕获有关,AttributeError但这个问题有一个很好的和干净的解决方法吗?因为我可以向你保证,这是一个调试噩梦......
您可以提出更好的异常消息:
class A(object):
def __getattr__(self, attr):
if not attr.startswith("ignore_"):
raise AttributeError("%r object has not attribute %r" % (self.__class__.__name__, attr))
@property
def prop(self):
return self.some_typo
a=A()
a.ignore_this
a.prop
Run Code Online (Sandbox Code Playgroud)
编辑:__getattribute__从对象基类调用解决了问题
class A(object):
def __getattr__(self, attr):
if not attr.startswith("ignore_"):
return self.__getattribute__(attr)
@property
def prop(self):
return self.some_typo
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1174 次 |
| 最近记录: |