FastAPI启动事件代码报错:缺少event_type必填参数
解决FastAPI启动事件报错:TypeError: FastAPI.on_event() missing 1 required positional argument: 'event_type'
这个报错是因为你使用的FastAPI版本(0.100.0及以上)已弃用@app.on_event()装饰器的旧写法,改用了新的生命周期管理机制。以下是两种可行的解决方法:
方法一:使用官方推荐的lifespan上下文管理器(优先选择)
这种方式符合FastAPI新版本设计规范,可同时管理启动和关闭事件:
from fastapi import FastAPI app = FastAPI() items = {} @app.get("/items/{item_id}") async def read_items(item_id: str): return items[item_id] async def lifespan(app: FastAPI): # 应用启动时执行的初始化逻辑 items["foo"] = {"name": "Fighters"} items["bar"] = {"name": "Tenders"} yield # 应用关闭时执行的清理逻辑(可选) items.clear() app.router.lifespan_context = lifespan
方法二:使用add_event_handler方法替代旧装饰器
如果想保留原有事件逻辑结构,可通过add_event_handler绑定启动事件:
from fastapi import FastAPI app = FastAPI() items = {} async def startup_event(): items["foo"] = {"name": "Fighters"} items["bar"] = {"name": "Tenders"} # 绑定启动事件 app.add_event_handler("startup", startup_event) @app.get("/items/{item_id}") async def read_items(item_id: str): return items[item_id]
两种方法都能实现原代码中启动时初始化items字典的需求,推荐使用第一种lifespan方式,可读性和扩展性更强。
内容的提问来源于stack exchange,提问作者Ian
相关产品推荐
相关产品推荐

