如何解决如何通过装饰器在后台捕获 AttributeError?
目前正在引发 AttributeError :
from functions import *
class Class:
def __init__(self):
self.name = 'Name'
@exception_handler
def do_stuff(self):
print('Stuff')
if __name__ == '__main__':
test = Class()
test.dooo_stuff()
AttributeError: 'Class' 对象没有属性 'dooo_stuff'
我想在后台使用装饰器以某种方式捕获此属性错误。以便我可以通知用户类方法名称已更改。
所以
try:
test = Class()
test.dooo_stuff()
except AttributeError:
print('info')
将不起作用,因为它不在后台。我想更改上面的错误消息以通知用户。 有没有办法做到这一点? 谢谢
解决方法
Python Data Model 非常强大。您可以使用 dunder 方法 customize attribute access __getattr__
:
当默认属性访问失败并出现 AttributeError [...] 时调用此方法应该返回(计算的)属性值或引发 AttributeError 异常。
尽管通常的用法是提供动态值(例如 mock 或 defaultdict 的实现方式),但可以执行我们想要的任何代码,例如调用回调:
def handler(attribute_error_name):
print(f"{attribute_error_name!r} does not exist")
class MyAPI:
def do_stuff(self):
return "done"
def __getattr__(self,item):
handler(item)
return lambda: None # if the return value is not callable,we get TypeError: 'NoneType' object is not callable
api = MyAPI()
print(api.do_stuff())
print(api.do_something_else())
输出
done
'do_something_else' does not exist
None
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。