FastAPI服务启动报错及404问题求助
FastAPI启动与路由问题排查
问题1:uvicorn main:app --reload启动报Firefox路径的FileNotFoundError
可能原因及解决步骤:
- 当前工作目录错误:执行命令的文件夹不是
main.py所在目录,导致Uvicorn找不到目标文件,同时误触发系统路径的异常查找。解决:先通过cd命令切换到main.py所在的项目根目录,再重新执行启动命令。 - Reload目录被错误配置:若系统环境变量
UVICORN_RELOAD_DIRS被设置为Firefox配置目录,Uvicorn会去监控无权访问或不存在的路径。解决:手动指定reload目标目录,执行uvicorn main:app --reload --reload-dir ./(./代表当前目录)。 - 文件名大小写不匹配:在Linux/macOS系统下文件名区分大小写,若命令写的是
main:app但实际文件是Main.py,会导致找不到文件并触发异常路径查找。解决:确保文件名与命令中的名称完全一致。 - Windows权限限制:Windows下Firefox配置目录需管理员权限才能访问,Uvicorn在reload模式下扫描系统目录时触发错误。解决:右键终端选择「以管理员身份运行」后再执行启动命令。
问题2:内嵌Uvicorn启动后访问报detail: 'Not Found'
先确认你的内嵌启动代码是否符合标准示例:
import uvicorn from fastapi import FastAPI app = FastAPI() # 路由必须绑定到正确的app实例,且定义在启动代码之前 @app.get("/") def index(): return {"msg": "Hello World"} if __name__ == "__main__": uvicorn.run(app, host="127.0.0.1", port=8000)
常见错误及解决:
- 路由未正确注册:若路由装饰器(如
@app.get("/"))绑定到了其他FastAPI()实例,或写在了if __name__ == "__main__"代码块内,会导致路由未被加载。解决:将路由定义放在app实例创建之后、启动代码之前。 - 访问路径与路由不匹配:比如定义的路由是
@app.get("/api"),但浏览器访问的是http://127.0.0.1:8000/,自然会返回Not Found。解决:确认访问路径与路由装饰器中的路径完全一致,包括斜杠、参数等细节。 - 启动参数错误:比如代码中设置
port=8001,但访问的是8000端口;或host设为0.0.0.0但用错误IP访问。解决:启动时查看终端输出的地址(如Uvicorn running on http://127.0.0.1:8000),严格按照该地址访问。 - 代码执行顺序错误:若
uvicorn.run()写在了路由定义之前,Uvicorn启动时还未加载路由。解决:调整代码顺序,确保所有路由定义在启动命令之前。
内容的提问来源于stack exchange,提问作者ihatecoding
相关产品推荐
相关产品推荐

