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

基于Tkinter将SQLite主库数据导入内存数据库报错如何解决

报错翻译

你提供的报错信息中文翻译如下:

Tkinter回调异常
回溯(最近调用优先):
文件 "C:\Users\Green\AppData\Local\Programs\Python\Python39\lib\tkinter_init_.py",第1892行,__call__方法
return self.func(*args)
文件 "D:\python\WindowsProject\app\user\user_sign_in.py",第188行,choose函数
fill_item_list_memory(item_memory)
文件 "D:\python\WindowsProject\app\user\user_sign_in.py",第171行,fill_item_list_memory函数
for item in data:
TypeError:NoneType对象不可迭代

错误根因

app.user.memory.insert()方法没有显式声明返回值,Python中所有未定义return语句的函数默认返回None,你将None传入了需要遍历可迭代对象的fill_item_list_memory函数,遍历None时触发该异常。

修复方案

以下两种方案任选其一即可:

方案1:精简冗余逻辑(最快修复)

choose函数存在逻辑重复:调用fill_item_list_memory后又执行了item_list_view_memory,后者会先清空列表,再调用已经验证可用的view()方法拉取全量内存库数据重新渲染,前者完全多余,直接删除对应行即可。
修改后代码:

def choose():
    clear_item_list_memory()
    app.user.memory.insert(item_name.get(), numbers.get(), item_price.get())
    item_list_view_memory()

方案2:修改insert方法返回值适配现有逻辑

如果需要保留现有choose函数的写法,只需给app.user.memory.insert方法增加可迭代类型的返回值即可:

# 修改前insert方法默认返回None
def insert(self, name, num, price):
    cursor = self.conn.cursor()
    cursor.execute("INSERT INTO 内存表名 VALUES (?,?,?)", (name, num, price))
    self.conn.commit()

# 修改后insert方法返回可迭代列表
def insert(self, name, num, price):
    cursor = self.conn.cursor()
    cursor.execute("INSERT INTO 内存表名 VALUES (?,?,?)", (name, num, price))
    self.conn.commit()
    # 可选1:返回全量内存库数据
    return self.view()
    # 可选2:返回当前插入数据组成的单元素列表
    # return [(name, num, price)]

内容的提问来源于stack exchange,提问作者Mobin Bagheri

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 18:00:04