跳转至

调试

在 Visual Studio Code 或 PyCharm 等编辑器中,可以连接调试器。

调用 uvicorn

在 FastAPI 应用中,直接导入并运行 uvicorn

import uvicorn
from fastapi import FastAPI

app = FastAPI()


@app.get("/")
def root():
    a = "a"
    b = "b" + a
    return {"hello world": b}


if __name__ == "__main__":
    uvicorn.run(app, host="0.0.0.0", port=8000)

__name__ == "__main__" 简介

__name__ == "__main__" 的主要目的是,以如下方式调用 Python 文件时,可以执行某些代码:

$ python myapp.py

但其他文件以模块方式时导入不会调用这些代码,如下:

from myapp import app

更多细节

假设文件名为 myapp.py

以如下方式运行:

$ python myapp.py

Python 会在文件中自动创建内部变量 __name__,并且它的值是字符串 "__main__"

因此,下面这行代码……

    uvicorn.run(app, host="0.0.0.0", port=8000)

……会被执行。


导入模块(文件)时就不会执行。

因此,假设还有一个文件 importer.py

from myapp import app

# 更多代码

此时,myapp.py 的内部不存在值为 "__main__" 的自动变量 __name__

所以,下面这行代码……

    uvicorn.run(app, host="0.0.0.0", port=8000)

……不会被执行。

说明

详见 Python 官方文档.

使用调试器运行代码

因为是在代码中直接运行 Uvicorn 服务器,所以,可以从调试器直接调用 Python 程序(即 FastAPI 应用)。


例如,可以在 Visual Studio Code 中:

  • 进入Debug面板
  • Add configuration...
  • 选择Python
  • 运行Python: Current File (Integrated Terminal)调试器

然后,调试器会使用 FastAPI 代码启动服务器,并停在断点处。

如下图所示:


如果使用的是 Pycharm,可以:

  • 打开Run菜单
  • 选中Debug...
  • 弹出上下文菜单
  • 选择要调试的文件(本例中为 main.py

然后,调试器会使用 FastAPI 代码启动服务器,并停在断点处。

如下图所示: