0%

FastAPI自学教程(48) - 调试机制

1. 基础调试配置

1
2
3
4
5
6
7
import uvicorn
from fastapi import FastAPI

app = FastAPI(debug=True)

if __name__ == "__main__":
uvicorn.run("main:app", reload=True, debug=True)
  • 启动参数配置:
    • reload=True 启用代码热重载
    • debug=True 显示详细错误堆栈
  • 开发服务器流程:
      graph TD
      A[代码修改] --> B[自动重启服务]
      B --> C[保留调试上下文]
      C --> D[显示错误详细信息]

2. 异常捕获与调试

1
2
3
4
5
6
7
from fastapi import HTTPException

@app.get("/items/{item_id}")
async def read_item(item_id: int):
if item_id == 0:
raise HTTPException(404, detail="Item not found")
return {"item_id": item_id}
  • 内置异常处理特性:
    • 自动生成标准HTTP错误响应
    • 开发环境返回详细错误追踪信息
  • 调试断点使用:
    1
    2
    import pdb; pdb.set_trace()  # 传统调试器
    breakpoint() # Python3.7+内置方法

3. 请求响应调试

1
2
3
4
5
6
from fastapi.encoders import jsonable_encoder

@app.post("/items/")
async def create_item(item: Item):
print(jsonable_encoder(item)) # 调试输出序列化数据
return item
  • 调试工具建议:
    • 使用print输出中间结果
    • 通过curl或Postman手动测试接口
    • 集成VS Code/PyCharm调试器
  • 日志配置示例:
    1
    2
    import logging
    logging.basicConfig(level=logging.DEBUG)

4. 生产环境注意事项

  1. 禁用调试模式:正式环境必须设置debug=False
  2. 错误处理:自定义异常处理器返回简化错误信息
    1
    2
    3
    4
    5
    6
    from fastapi import FastAPI, Request
    from fastapi.responses import JSONResponse

    @app.exception_handler(Exception)
    async def generic_exception_handler(request: Request, exc: Exception):
    return JSONResponse(status_code=500, content={"detail": "服务器内部错误"})
  3. 监控集成:使用Sentry/Bugsnag捕获异常
  4. 日志分级:区分DEBUG/INFO/WARNING等级别

调试命令示例:

1
uvicorn main:app --reload --debug