【发布时间】:2015-10-21 06:48:07
【问题描述】:
当我运行这段代码时,什么都没有打印出来。为什么?不抛出异常,不执行 if...elif...else 结构中的任何内容。
环境:Python 2.7。
d= {"x":1}
class bizarre(object):
def __init__(self):
self.metadata = {}
def __getattr__(self, name):
return self.metadata.get(name, None)
@property
def odd(self):
if False:
print '1'
elif self.fake.get("blah", ''):
print '2'
else:
print '3'
b=bizarre()
b.odd
BrenBarn 建议的The previous answer 具有回答我的问题所需的信息,尽管不是直接的。但我现在可以回答我自己的问题了:
属性装饰器使用AttributeError作为来自getter的信号来调用__getattr__,所以如果你的getter抛出一个属性错误,它会被捕获并且你不会看到它。
感谢柠檬头和 Mission.liao 纵容我的无知。
【问题讨论】:
-
不要认为这是重复的,虽然它们有相同的原因,上一个问题是关于
__getattr__和这个问题是关于@property装饰器。
标签: python exception-handling decorator