使用yield时触发FileNotFoundError:找不到文件或目录'o'求助
问题原因排查
在Gradio里用yield返回中间结果时,要是返回的内容格式和对应输出组件的预期不匹配,Gradio会把它误当成文件路径去解析,这就触发了FileNotFoundError——这里的'o'应该是你yield输出的某个内容被错误识别成了文件路径,才会报找不到这个文件。
比如你的输出组件是gr.Image或gr.File,但你yield了单个字符'o',Gradio就会认为这是要加载的文件路径,自然找不到;哪怕是文本组件,要是返回的内容不符合组件预期(比如本该返回完整字符串却返回单个字符),也可能触发这个误解析。
解决方案
- 匹配组件类型与输出内容
不管用什么输出组件,yield的内容必须是组件能正确识别的类型:文本组件就返回字符串,图像组件返回numpy数组、PIL.Image或者合法的文件路径,别随便返回单个字符。要是是多输出组件,得返回和组件数量对应的元组或字典,比如两个文本框就返回("第一步完成", "")这种格式。 - 检查
switch_ver的yield输出
去看看switch_ver里每一处yield的内容,是不是不小心输出了单个字符'o'——比如变量赋值错了、字符串截取出问题,都可能导致这种情况。把这类单个字符换成明确的文本,比如“处理中...”。 - 显式输出中间状态文本
要是需要返回中间进度,直接用完整的状态描述字符串,别用单个字符当输出,彻底避免Gradio把内容误解析成文件路径。
代码示例修正
原来的错误代码片段:
def switch_ver(): # 业务操作 yield 'o' # 单个字符被Gradio当成文件路径 # 后续操作 yield "处理完成"
修改后:
def switch_ver(): # 业务操作 yield "正在处理,请稍候..." # 用明确文本替代单个字符 # 后续操作 yield "处理完成"
内容的提问来源于stack exchange,提问作者LittleWing
相关产品推荐
相关产品推荐

