news 2026/6/10 16:42:59

return、rasie、yiled的区别

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
return、rasie、yiled的区别

一、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(title="SSE 流式响应示例") 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}") b="haha" # 直接返回生成器对象,不执行它 return event_generator(a,b) async def event_generator(a: str,b:str): print(b) """SSE 异步生成器""" yield f"data: {json.dumps({'status': '开始查询', 'progress': 0})}\n\n" # 立即刷新缓冲区 await asyncio.sleep(0) # 分阶段发送进度 for i in range(1, 4): await asyncio.sleep(1) yield f"data: {json.dumps({'status': f'查询中...{i}秒', 'progress': i * 33})}\n\n" result = await async_query(a) yield f"data: {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_type="text/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", host="127.0.0.1", port=8000)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 11:14:06

通义千问3-Reranker-0.6B与Dify平台集成指南

通义千问3-Reranker-0.6B与Dify平台集成指南 1. 为什么需要在Dify中集成Qwen3-Reranker-0.6B 最近用Dify搭建知识库时,发现一个很实际的问题:默认的向量检索结果虽然能召回相关内容,但排序经常不够精准。比如用户问“如何配置Milvus集群”&…

作者头像 李华
网站建设 2026/5/21 5:20:15

零基础玩转 Nano-Banana:手把手教你制作甜度爆表的服装分解图

零基础玩转 Nano-Banana:手把手教你制作甜度爆表的服装分解图 1. 这不是修图软件,是“软萌拆解魔法屋” 你有没有试过盯着一件喜欢的衣服发呆——想弄明白蝴蝶结是怎么系的、裙摆褶皱怎么压出来的、腰封暗扣藏在哪?传统方法要么翻看设计师手…

作者头像 李华
网站建设 2026/6/10 8:09:28

SAM 3多模态分割效果展示:点/框/文本提示精准分割book与rabbit案例

SAM 3多模态分割效果展示:点/框/文本提示精准分割book与rabbit案例 1. 什么是SAM 3?——一个真正“会看懂”的分割模型 你有没有试过,对着一张杂乱的桌面照片,只想把其中一本书单独抠出来,却要花十几分钟在PS里反复调…

作者头像 李华
网站建设 2026/6/10 15:02:17

嵌入式系统中的数据滤波与PID控制工程实践

1. 嵌入式控制系统中的数据滤波:原理、选型与工程实现在嵌入式实时控制系统中,传感器原始数据从来不是“干净”的。无论是电赛小车中编码器反馈的转速、超声波模块测得的距离,还是智能车摄像头提取的赛道中心偏移量,原始采样值必然…

作者头像 李华
网站建设 2026/6/9 23:30:51

如何3步解锁加密视频?VideoUnlocker实现macOS视频格式自由转换

如何3步解锁加密视频?VideoUnlocker实现macOS视频格式自由转换 【免费下载链接】QMCDecode QQ音乐QMC格式转换为普通格式(qmcflac转flac,qmc0,qmc3转mp3, mflac,mflac0等转flac),仅支持macOS,可自动识别到QQ音乐下载目录&#xff…

作者头像 李华