news 2026/5/15 9:54:39

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/5/14 2:27:11

Windows桌面美学:TranslucentTB任务栏透明方案全解析

Windows桌面美学:TranslucentTB任务栏透明方案全解析 【免费下载链接】TranslucentTB 项目地址: https://gitcode.com/gh_mirrors/tra/TranslucentTB 价值定位:重新定义任务栏的视觉语言 在数字界面设计中,任务栏作为操作系统的视觉…

作者头像 李华
网站建设 2026/5/11 1:34:19

手把手教你用GTE-Pro搭建智能搜索系统

手把手教你用GTE-Pro搭建智能搜索系统 1. 为什么你需要语义搜索,而不是关键词搜索? 你有没有遇到过这些情况: 在公司知识库里搜“服务器挂了”,结果返回一堆无关的运维手册,真正有用的“Nginx配置检查指南”却排在第…

作者头像 李华
网站建设 2026/5/11 1:33:59

MusicFree插件系统深度解析:打造一站式音乐体验解决方案

MusicFree插件系统深度解析:打造一站式音乐体验解决方案 【免费下载链接】MusicFreePlugins MusicFree播放插件 项目地址: https://gitcode.com/gh_mirrors/mu/MusicFreePlugins 引言:音乐获取的现代挑战与解决方案 在数字音乐时代,用…

作者头像 李华
网站建设 2026/5/11 1:34:18

Nano-Banana部署指南:SDXL开源镜像一键启动结构拆解实验室

Nano-Banana部署指南:SDXL开源镜像一键启动结构拆解实验室 1. 什么是Nano-Banana?专为工业设计而生的AI结构拆解工具 你有没有遇到过这样的场景:设计师需要为一款新发布的无线耳机制作产品说明书,但手绘爆炸图耗时太久&#xff…

作者头像 李华
网站建设 2026/5/10 4:00:36

小白必看:GTE文本嵌入模型快速部署与使用指南

小白必看:GTE中文文本嵌入模型快速部署与使用指南 你有没有遇到过这些情况? 想从上千条客服对话里快速找出语义相似的问题,却只能靠关键词硬匹配,漏掉大量“换说法但意思一样”的样本;做知识库检索时,用户…

作者头像 李华
网站建设 2026/5/15 5:23:49

5步搞定Z-Image-Turbo:孙珍妮AI写真生成实战

5步搞定Z-Image-Turbo:孙珍妮AI写真生成实战 你是否想过,只需几句话描述,就能生成一张神态自然、风格统一、细节丰富的孙珍妮风格AI写真?不是模糊的贴图,不是生硬的换脸,而是真正理解“清冷感”“微卷发丝…

作者头像 李华