news 2026/4/23 16:06:20

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/4/23 11:34:38

BGE Reranker-v2-m3保姆级教程:从安装到文本重排序全流程

BGE Reranker-v2-m3保姆级教程:从安装到文本重排序全流程 1. 你不需要懂模型,也能用好这个重排序工具 你是不是遇到过这些情况? 检索系统返回了10条结果,但真正有用的只有第3条和第7条,其他全是“沾边但无关”的干扰…

作者头像 李华
网站建设 2026/4/23 12:55:39

7个技巧让qmcdump释放加密音乐自由:本地音频解密工具终极指南

7个技巧让qmcdump释放加密音乐自由:本地音频解密工具终极指南 【免费下载链接】qmcdump 一个简单的QQ音乐解码(qmcflac/qmc0/qmc3 转 flac/mp3),仅为个人学习参考用。 项目地址: https://gitcode.com/gh_mirrors/qm/qmcdump …

作者头像 李华
网站建设 2026/4/22 17:18:29

DeepSeek-OCR-2多语言支持:跨语种文档识别实战

DeepSeek-OCR-2多语言支持:跨语种文档识别实战 1. 多语言混合文档识别的现实挑战 你有没有遇到过这样的场景:一份合同里中英文混排,表格里夹着日文注释,页脚又印着阿拉伯数字编号?或者一份学术论文,正文是…

作者头像 李华
网站建设 2026/4/23 10:48:30

突破数据库工具限制:高效使用DBeaver的实用技巧

突破数据库工具限制:高效使用DBeaver的实用技巧 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter 作为数据从业者,你是否曾因数据库客户端工具的功能限制而影响工作效率?当你需要…

作者头像 李华
网站建设 2026/4/23 10:47:58

RMBG-2.0在遥感图像处理中的地物提取应用

RMBG-2.0在遥感图像处理中的地物提取应用 遥感图像里藏着太多信息,但真正用起来却常常卡在第一步:怎么把建筑物、道路、水体这些关键地物从复杂的背景里干净利落地分离出来?传统方法要么靠人工勾画,耗时耗力;要么用老…

作者头像 李华