刚刚开始使用 FastAPI,但在尝试让它识别 VSCode 调试器中的断点时遇到了问题。奇怪的是,它确实成功地打破了路线中未包含的线路
直接从教程中提取: https: //fastapi.tiangolo.com/tutorial/debugging/
import uvicorn
from fastapi import FastAPI
app = FastAPI() # breakpoint here works on launching file
print('here') # breakpoint here works on launching file
@app.get("/")
def root():
a = "a" # breakpoint here does NOT work
b = "b" + a
return {"hello world": b} # returns data successfully
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=5002)
Run Code Online (Sandbox Code Playgroud)
如上所述,路由外的线路工作正常,当我转到该地址时,我成功获取数据,但路由内的断点不会触发。不知道我在这里缺少什么。尝试过VSCode 中的 Debug FastAPI 应用程序的各种解决方案
我不确定这是否会产生影响,但这也是通过 VSCode 上的远程 SSH 扩展运行的(我的代码位于 gcloud 虚拟机上)。也许这有所贡献,但同样,其他断点也可以正常触发。
我的启动.json:
{
// Use …Run Code Online (Sandbox Code Playgroud) 本质上我正在尝试为嵌套字典分配一个值。如果我通过拼写出来来构建字典,那么稍后分配一个值将按预期工作。但是,如果我创建一个模板字典,将其分配给所有键,然后返回并尝试为嵌套键分配一个值,现在该键的每个实例都会获取该值。用代码更容易显示:
initialize_dict = {'a':0,'b':0}
x = {}
x['FOO'] = initialize_dict
x['BAR'] = initialize_dict
y = {'FOO':{'a':0,'b':0},'BAR':{'a':0,'b':0}}
logging.info("x is {}".format(x))
logging.info("y is {}".format(y))
logging.info(x==y)
x['FOO']['a']=13231
y['FOO']['a']=13231
logging.info("new x is {}".format(x))
logging.info("new y is {}".format(y))
Run Code Online (Sandbox Code Playgroud)
还有我的日志:
INFO:root:x is {'FOO': {'a': 0, 'b': 0}, 'BAR': {'a': 0, 'b': 0}}
INFO:root:y is {'FOO': {'a': 0, 'b': 0}, 'BAR': {'a': 0, 'b': 0}}
INFO:root:True
INFO:root:new x is {'FOO': {'a': 13231, 'b': 0}, 'BAR': {'a': 13231, 'b': 0}}
INFO:root:new y is {'FOO': {'a': 13231, 'b': 0}, …Run Code Online (Sandbox Code Playgroud)