要创建通用错误处理程序,您可以使用:
@api.errorhandler(Exception)
def generic_exception_handler(e: Exception):
堆栈跟踪捕获
要自定义堆栈跟踪处理,请参阅Python When I catch an exception, how do I get the type, file, and line number?。
堆栈跟踪数据捕获示例
import sys
...
@api.errorhandler(Exception)
def generic_exception_handler(e: Exception):
exc_type, exc_value, exc_traceback = sys.exc_info()
if exc_traceback:
traceback_details = {
'filename': exc_traceback.tb_frame.f_code.co_filename,
'lineno': exc_traceback.tb_lineno,
'name': exc_traceback.tb_frame.f_code.co_name,
'type': get_type_or_class_name(exc_type),
'message': str(exc_value),
}
return {'message': traceback_details['message']}, 500
else:
return {'message': 'Internal Server Error'}, 500
函数get_type_or_class_name 是一个帮助器,它获取对象的类型名称,或者在类的情况下,返回类名称。
def get_type_or_class_name(var: Any) -> str:
if type(var).__name__ == 'type':
return var.__name__
else:
return type(var).__name__
通常还提供HTTPException 处理程序:
from werkzeug.exceptions import HTTPException
@api.errorhandler(HTTPException)
def http_exception_handler(e: HTTPException):