如何将装饰器中引发的异常传递给函数装饰?

时间:2016-03-19 19:25:49

标签: python decorator

我希望装饰的函数可以捕获其装饰器引发的异常

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

我怎么能前往?

1 个答案:

答案 0 :(得分:1)

无法做到。修饰函数是一个内部作用域,不能捕获装饰器外部作用域中引发的异常。想想运行代码所涉及的三个步骤。

(1)装饰器在调用修饰函数之前运行一些代码...装饰函数无法捕获任何异常,因为它还没有运行。

(2)装饰器调用装饰函数...现在装饰器不能引发异常,因为它没有运行。

(3)函数返回并且装饰器代码再次运行...装饰函数无法捕获任何内容,因为它已完成执行。

(编辑)

有一个问题的解决方案。 File.ReadAllText()知道应该抓住某种例外。可以编写相同的func以获得一个参数,告诉它它处于错误状态。我不确定这是最好的解决方案(这里甚至还需要装饰师吗?)但我可以说服......

func