You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 03:20:15