调试¶
在 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 代码启动服务器,并停在断点处。
如下图所示: