天天看點

AssertionError: View function mapping is overwriting an existing endpoint function

問題:給兩個函數添加兩個裝飾器

@app.route("/path1")
@exception_handler
def func1():
    pass

@app.route("/path2")
@exception_handler
def func2():
    pass
           

這樣就會造成函數名的重定義。

解決:改一下包裝的函數名即可:wrapper.__name__ = func.__name__

def exception_handler(func):
  def wrapper(*args, **kwargs):
    try:
        return func(*args, **kwargs)
    except Exception as e:
        error_code = getattr(e, "code", 500)
        logger.exception("Service exception: %s", e)
        r = dict_to_json({"message": e.message, "matches": e.message, "error_code": error_code})
        return Response(r, status=error_code, mimetype='application/json')
  # Renaming the function name:
  wrapper.__name__ = func.__name__
  return wrapper
           

繼續閱讀