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

PyQt QInputDialog.getItem点击Cancel按钮程序崩溃问题如何解决

问题根因

你的代码触发UnboundLocalError有两个核心场景:

  • 点击Cancel按钮时,QInputDialog.getItem返回的ok值为False,if ok and item: 包裹的代码块完全不执行,如果你后续在这个if块之外引用了link或dataset_name变量,这两个变量从未被赋值,直接触发未绑定局部变量错误。
  • 即便点击OK选中了选项,要是遍历datasets时没有匹配到和选中item一致的条目,link和dataset_name也不会被赋值,后续引用同样会报错。
修复方案

提前给变量设置默认初始值,同时补充变量有效性判断即可,修改后的代码参考:

query = "SELECT name FROM datasets"
datasets = cur.execute(query).fetchall()
items = ()
for dataset in datasets:
   items += dataset
# 提前初始化后续要用到的变量,设置默认空值
link = None
dataset_name = None
item, ok = QInputDialog.getItem(self, "select input dialog", "list of languages", items, 0, False)
if ok and item:
   query = "SELECT name, file FROM datasets"
   datasets = cur.execute(query).fetchall()
   for dataset in datasets:
      if dataset[0] == item:
         link = dataset[1]
         dataset_name = "Meno datasetu: " + str(dataset[0].split("-")[0])

# 后续所有依赖link、dataset_name的逻辑,必须先判断变量有效性再执行
if link and dataset_name:
   # 把原来用到link和dataset_name的业务代码放到这里
   pass

你也可以把所有依赖link和dataset_name的逻辑全部放到if dataset[0] == item:的判断块内部,完全避免变量在未赋值的场景下被外部引用。

内容的提问来源于stack exchange,提问作者Radoslav Dugas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 18:45:02