首页 > 解决方案 > 使用 python 装饰器时防止重复的异常引发

问题描述

如果我有一个装饰函数引发异常,然后在装饰器中捕获该异常,以执行一些逻辑。我怎样才能让装饰函数返回异常(而不在装饰器中再次引发它)。

装饰功能示例:

    @ach_api_error()
    def retrieve(self, request, pk=None):

      profile = request.user.profile

      if not pk:
        raise CustomNotFoundException(detail="Not Found.")

      return Response(status=status.HTTP_200_OK)

装饰器示例:

def ach_api_error():
  def decorate(f):
    def applicator(*args, **kwargs):
        try:
            result = f(*args, **kwargs)
            return result
        except CustomNotFoundException:
           #
           # PERFORM SOME EXCEPTION LOGGING HERE
           #
           raise CustomNotFoundException(detail="Not Found.")
    return applicator
  return decorate

我希望decorate()函数返回异常。如何在不引发两次相同异常的情况下实现这一目标?

标签: pythonpython-decorators

解决方案


推荐阅读