我希望装饰的函数可以捕获其装饰器引发的异常
def decorator(func):
def _decorator(request, *args, **kwargs):
if condition:
return func(request, *args, **kwargs)
else:
"""
THIS EXCEPTION CAN'T BE CAUGHT FROM FUNCTION DECORATED
"""
raise LimitReached
return _decorator
我怎么能前往?
答案 0 :(得分:1)
无法做到。修饰函数是一个内部作用域,不能捕获装饰器外部作用域中引发的异常。想想运行代码所涉及的三个步骤。
(1)装饰器在调用修饰函数之前运行一些代码...装饰函数无法捕获任何异常,因为它还没有运行。
(2)装饰器调用装饰函数...现在装饰器不能引发异常,因为它没有运行。
(3)函数返回并且装饰器代码再次运行...装饰函数无法捕获任何内容,因为它已完成执行。
(编辑)
有一个问题的解决方案。 File.ReadAllText()
知道应该抓住某种例外。可以编写相同的func
以获得一个参数,告诉它它处于错误状态。我不确定这是最好的解决方案(这里甚至还需要装饰师吗?)但我可以说服......
func