如何在通过uvicorn.run()运行FastAPI时启用pdb调试?
解决FastAPI中用uvicorn.run()启动时pdb断点生效的问题
有几种简单的方式可以让pdb.set_trace()在uvicorn.run()启动的应用中正常工作:
直接传递
debug=True参数给uvicorn.run()
虽然你可能误以为该方法没有debug参数,但实际上uvicorn.run()支持通过关键字参数传递debug=True,这和命令行的--debug效果一致,会自动启用调试模式,包括pdb断点支持:import uvicorn from fastapi import FastAPI app = FastAPI() @app.get("/") def read_root(): import pdb; pdb.set_trace() return {"Hello": "World"} if __name__ == "__main__": uvicorn.run("main:app", debug=True)启用reload模式
如果你的uvicorn版本不支持直接传debug=True,可以通过设置reload=True来启用调试相关特性,pdb断点也会正常触发:if __name__ == "__main__": uvicorn.run("main:app", reload=True)设置PYTHONBREAKPOINT环境变量
手动指定Python的断点函数,不需要依赖uvicorn的调试模式,直接在代码开头添加环境变量设置:import os os.environ["PYTHONBREAKPOINT"] = "pdb.set_trace" import uvicorn from fastapi import FastAPI app = FastAPI() @app.get("/") def read_root(): breakpoint() # 或者用import pdb; pdb.set_trace() return {"Hello": "World"} if __name__ == "__main__": uvicorn.run("main:app")
内容的提问来源于stack exchange,提问作者Nathan Wailes
相关产品推荐
相关产品推荐

