You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FastAPI使用add_exception_handler时traceback.format_exc返回None

问题根因

traceback.format_exc()的工作逻辑是读取当前执行线程中活跃的异常上下文栈信息,FastAPI在捕获路由抛出的异常、转发到自定义异常处理器前,已经退出了原始异常的except上下文块,此时调用无参的format_exc()拿不到有效异常上下文,就会返回None。

修复方法

完整的异常栈信息已经绑定在传入异常处理器的exc参数对象上,不需要从当前上下文读取,改用traceback.format_exception()从异常对象提取完整栈追踪即可。
修正后的exception_handler.py代码如下:

from fastapi.responses import JSONResponse
from fastapi import status
from fastapi import Request
import traceback


def general_exception_handler(req: Request, exc: Exception):
    '''
    未捕获通用异常处理器
    '''
    # 从异常对象提取完整格式化栈追踪
    tracback_msg = "".join(
        traceback.format_exception(type(exc), exc, exc.__traceback__)
    )
    return JSONResponse(
        {
            "code": status.HTTP_500_INTERNAL_SERVER_ERROR,
            "message": f"error info: {tracback_msg}",
            "data": "",
        },
        status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
    )

server.py的异常处理器绑定逻辑不需要改动,重启服务后触发异常即可在接口响应中拿到完整栈信息。

注意事项
  • 安全提醒:完整traceback会暴露服务端文件路径、依赖版本、代码逻辑片段等敏感信息,生产环境不建议直接透传给前端,可将栈信息写入服务端日志,接口仅返回通用错误提示。
  • Python 3.10及以上版本可简化写法,直接调用"".join(traceback.format_exception(exc))即可拿到相同结果,不需要手动传入异常类型和traceback对象。

内容的提问来源于stack exchange,提问作者IMAPOTATO

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 13:03:21