一、return函数返回结果 终止执行唯一用途是从函数中返回指定结果并立即终止函数的执行函数内return之后的代码不会被执行二、raise主动触发异常 终止异常传播前的执行主动手动抛出指定的异常对象中断当前的程序执行流程若抛出的异常未被try...except捕获程序会直接崩溃并输出异常信息。三、yield生成器产出值 挂起函数保留状态作用是产出一个值给生成器的调用方同时挂起当前函数的执行状态保留所有变量、执行位置待下一次通过next()或for循环触发时从挂起的位置继续执行直到再次遇到yield或函数结束。1.流式输出示例import uvicorn from fastapi import FastAPI import asyncio from fastapi.responses import StreamingResponse from pydantic import BaseModel import json app FastAPI(titleSSE 流式响应示例) class QueryModel(BaseModel): a: str async def async_query(a: str) - str: await asyncio.sleep(3) return f查询结果参数{a}查询成功 # ✅ 正确aa 返回生成器对象不 await async def aa(a: str): 中间层函数 - 只负责创建和返回生成器 不要 await不要 await不要 await # 可以在这里做参数校验、日志记录、权限检查等 print(f[中间层] 收到参数: {a}) bhaha # 直接返回生成器对象不执行它 return event_generator(a,b) async def event_generator(a: str,b:str): print(b) SSE 异步生成器 yield fdata: {json.dumps({status: 开始查询, progress: 0})}\n\n # 立即刷新缓冲区 await asyncio.sleep(0) # 分阶段发送进度 for i in range(1, 4): await asyncio.sleep(1) yield fdata: {json.dumps({status: f查询中...{i}秒, progress: i * 33})}\n\n result await async_query(a) yield fdata: {json.dumps({status: 完成, result: result, progress: 100})}\n\n app.post(/select) async def select(q: QueryModel): # ✅ 从中间层获取生成器 generator await aa(q.a) # await aa() 是等待 aa 函数本身不是等待生成器 return StreamingResponse( generator, # 传入生成器对象 media_typetext/event-stream, # ← 2. 告诉浏览器这是SSE流 headers{ # ← 3. 禁用所有缓冲机制 Cache-Control: no-cache, no-transform, Connection: keep-alive, X-Accel-Buffering: no, } ) if __name__ __main__: uvicorn.run(main:app, host127.0.0.1, port8000)