handle_error() takes 4 positional arguments but 6 were given
自己的工程代码基于flask
写的,最近升级了webargs
到5.1.3
版本之后就会有一个异常错误捕获type error
提示handle_error() takes 4 positional arguments but 6 were given
错误
这个错误的意思是,这个handle_error
函数需要四个参数,但是给了六个
后边查到webargs
的官方文档,我们这里改造一下老版本的handle error函数就可以啦
老版本的handle error 函数,确实是只有四个参数。但是我们升级了webargs,然后我们自己的CustomFlaskParser
是继承自FlaskParser
这个类的,这个类的handle_error函数是有六个参数的,所以我们重载之后的函数也需要这么多个参数。
FlaskParser
类的handle_error函数
def handle_error(self, error, req, schema, error_status_code, error_headers):
"""Handles errors during parsing. Aborts the current HTTP request and
responds with a 422 error.
"""
status_code = error_status_code or self.DEFAULT_VALIDATION_STATUS
abort(
status_code,
exc=error,
messages=error.messages,
schema=schema,
headers=error_headers,
)
我们自己旧的handle_error函数如下:
def handle_error(self, error, req, schema):
web_logger.warning(f'{request.url} - 请求有误,取消处理。状态码 {getattr(error, "status_code", 422)} ,错误原因 {error.messages}')
super(CustomFlaskParser, self).handle_error(error, req, schema)
根据文档,提示的,大于4.2以上的版本需要改成如下
@parser.error_handler
def handle_error(error, **kwargs):
raise CustomError(error.messages)
class MyParser(FlaskParser):
def handle_error(self, error, req, schema, status_code, headers):
# ...
raise CustomError(error.messages)
# OR
def handle_error(self, error, req, **kwargs):
# ...
raise CustomError(error.messages)
我们直接改造新的handle error函数就可以啦,很简单,因为新的版本不兼容,所以参数变了
def handle_error(self, error, req, schema, status_code, headers):
web_logger.warning(f'{request.url} - 请求有误,取消处理。状态码 {getattr(error, "status_code", 422)} ,错误原因 {error.messages}')
super(CustomFlaskParser, self).handle_error(error, req, schema, status_code, headers)
写好后测试通过就可以提交啦(o)/