错误处理
只需要使用
raise 关键字
就可以返回错误响应
触发 HTTPException 异常响应
import uvicorn from fastapi import FastAPI from fastapi.exceptions import HTTPException app = FastAPI() @app.get('/http_exception') def exception(city: str): if city != 'cd': raise HTTPException( detail='city is not cd', # 错误响应内容 headers={'city_error': 'city is not cd'}, # 发生错误添加的头部信息 status_code=420) # 自定义响应码 return {'city': 'cd'} if __name__ == '__main__': uvicorn.run(app)
重写错误响应
准确一点是 对
相应的错误
进行拦截 修改
,并不是重写
重写 HTTPException 异常响应
from fastapi.exceptions import HTTPException # from starlette.exceptions import HTTPException as StarletteHTTPException # 与上面一排一样 app = FastAPI() # 在异常中间件 拦截,相当于 重写 @app.exception_handler(HTTPException) async def http_exception_v1(request: Request, exc: HTTPException): """ # 改变成字符串响应 :param request: 不可省略 :param exc: HTTPException :return: """ return PlainTextResponse(str(exc.detail), status_code=400)
重写 RequestValidationError 参数验证错误响应
from fastapi.exceptions import RequestValidationError # 在异常中间件 拦截 RequestValidationError 进行操作 @app.exception_handler(RequestValidationError) async def request_validation_error_v1(request: Request, exc: RequestValidationError): """ # 改变成字符串响应 :param request: 不可省略 :param exc: RequestValidationError :return: """ print(exc) return PlainTextResponse(str(exc.errors()), status_code=500)
自写错误处理类
当提供的两种不够用的时候(
HTTPException
、RequestValidationError
),可以自己写
import uvicorn from fastapi import FastAPI from fastapi.requests import Request from starlette.responses import PlainTextResponse app = FastAPI() # 自定义错误类 继承 Exception 类 class UnicornException(Exception): def __init__(self, error_city: str, status_code: int): self.error_city = error_city self.status_code = status_code # 异常中间件 拦截自定义的异常 @app.exception_handler(UnicornException) async def request_validation_error_v1(request: Request, exc: UnicornException): """ # 改变成字符串响应 :param request: 不可省略 :param exc: UnicornException :return: """ print(exc) return PlainTextResponse(str(exc.error_city), status_code=exc.status_code) @app.get('/validation') def validation(city: int): if city != 111 # 触发 自定义异常 raise UnicornException( error_city='city is not 111', # 错误响应内容 status_code=420) # 自定义响应码 return {'city': city} if __name__ == '__main__': uvicorn.run(app)
版权声明:《 【FastAPI】错误 & 异常 响应处理 和 自定义错误 & 异常 处理 》为明非原创文章,转载请注明出处!
最后编辑:2022-2-17 11:02:27