快速结论:这个问题通常出现在 Gradio 6.x 中使用 gr.Dropdown(choices=[("Default", None), ...]),即把 None 当作一个选项真实值时。下拉列表能显示该项,但输入框不会显示已选中的 label。优先排查你的 choices 里是否用 None 作为选项值。
适用环境:Issue 已确认工具为 Gradio;出现问题的版本为 gradio 6.26.0;在 gradio 5.49.1 上不存在该问题。Issue 未提供操作系统、Python、CUDA、显卡或其它依赖信息,这些项目无法确认。
最快修复方案:暂无确认的一步修复方案。官方明确表示不会修改此行为,因为 None 在内部被保留为“未选择任何值”。可优先尝试的变通做法是给“Default”选项使用一个不会与真实值冲突的哨兵字符串(例如 "__default__"),在回调函数内部再把它转换回 None。
注意事项:官方说明这是设计限制,不是回归 bug;官方提到可能在 Gradio 7 大版本中重新考虑该逻辑,但目前无时间表。Issue 中的哨兵字符串方案是 workaround,并非修复,会要求改动业务代码中大量依赖 None 的判断逻辑,存在引入新问题的风险。Gradio 6.x 下不要指望通过配置或补丁让 None 同时作为选项值正常显示。
问题场景
在 Gradio 6.26.0 中使用 gr.Dropdown,并给 choices 传入带有 None 值的元组列表,例如 [("Default", None), ("Option A", "a"), ...]。运行时下拉箭头展开后可以看到“Default”这一项,但选中后输入框内不显示“Default”这个 label,字段看起来像是没有选中任何内容。在 Gradio 5.49.1 中同样代码没有该现象。
报错原文
gradio v6.26.0: Dropdown label not shown on field when option value is None
原因分析
最可能的原因是 Gradio 6.x 内部把 None 保留为“no value selected / 未选择任何值”这一状态的标志值。当选项的真实值也是 None 时,组件无法区分“当前未选择”与“当前选中了值为 None 的选项”,因此在输入框中不再渲染该选项的 label。官方在讨论后确认这是有意行为,并明确不会在当前版本中改变该逻辑,只补了文档说明。
环境排查
- 确认 Gradio 版本:问题报告为 gradio 6.26.0;旧版 gradio 5.49.1 行为不同。
- 检查
gr.Dropdown的choices中是否存在("label", None)这类以None作为 value 的选项。 - 确认组件初始值
value与 change 回调中处理的值的类型。 - Issue 未提供操作系统、Python 版本、CUDA、显卡、PyTorch 等信息,这些不需要作为本问题的排查重点。
解决步骤
- 确认你的代码确实使用了
None作为某个 Dropdown 选项的值。如果下拉展开能看到该选项、但选中后字段空白,基本就是这个模式。 - 官方首选做法(可优先尝试):给“Default”选项换成一个不会与真实选项值冲突的哨兵字符串,例如
"__default__",并把 Dropdown 的初始value设为该字符串。 - 在回调函数内部把哨兵字符串转换回
None,保持后续业务逻辑仍按None处理。 - 如果代码中大量依赖
None判断,先评估改动范围。社区反馈显示这类全局替换成本高、风险大;官方也承认用户可能需要改动整个仓库逻辑。 - 不要期待在当前 6.x 系列获得官方修复。官方表示会在 Gradio 7 大版本中“可能重新考虑”,目前该 Issue 已按设计限制关闭。
Issue 中给出的变通示例(哨兵值方案):
import gradio as gr
DEFAULT = "__default__"
def on_select(value):
value = None if value == DEFAULT else value
return (
"Selected: Default (None)"
if value is None
else f"Selected: {value}"
)
with gr.Blocks() as demo:
dropdown = gr.Dropdown(
choices=[
("Default", DEFAULT),
("Option A", "a"),
("Option B", "b"),
("Option C", "c"),
],
value=DEFAULT,
label="Choose an option",
)
output = gr.Textbox(label="Result")
dropdown.change(on_select, inputs=dropdown, outputs=output)
demo.launch()
验证方法
应用哨兵字符串方案后,重新启动应用:展开 Dropdown 能看到“Default”选项,选中后输入框字段能正常显示“Default”这个 label;同时回调输出应与原先使用 None 时的业务逻辑一致(例如文本框中显示 Selected: Default (None))。如果字段仍为空白,检查是否还有其它选项值被设成了 None,或初始 value 未同步改成哨兵字符串。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。

![[Bug]: MCP on host mode returns empty dataset ids](https://www.chat-gpts.plus/wp-content/uploads/2026/09/13183-415cd908-768x403.jpg)
