解决python flask报错:AssertionError: View function mapping is overwriting an existing endpoint function: main
在使用flask报错:
AssertionError: View function mapping is overwriting an existing endpoint function: exception_handler
首先要检查是否在不同的的路由里使用了相同的endpoint函数。
定义路由代码:
@app.route("/path1")
@exception_handler
def func1():
pass
@app.route("/path2")
@exception_handler
def func2():
pass
此次错误的原因是使用了wrapper来包装api函数,如下:
def exception_handler(func):
def wrapper(*args, **kwargs):
try:
return func(*args, **kwargs)
except Exception as e:
error_code = getattr(e, "code", 500)
r = dict_to_json({"message": e.message, "error_code": error_code})
return Response(r, status=error_code, mimetype='application/json')
return wrapper
解决方法
方法一:
重命名wrapper的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)
r = dict_to_json({"message": e.message, "error_code": error_code})
return Response(r, status=error_code, mimetype='application/json')
#此处重命名了func_name
wrapper.func_name = func.func_name
return wrapper
方法二:
除了使用wrapper包装api函数外,也可以在@app.route设置endpoint名,以避免出现重名的endpoint 函数:
@app.route("/path1", endpoint='func1')
@exception_handler
def func1():
pass
@app.route("/path2", endpoint='func2')
@exception_handler
def func2():
pass