PySimpleGUI表格日期范围过滤器TypeError报错修复求助
PySimpleGUI表格日期过滤报错修复:TypeError: list indices must be integers or slices, not str
报错信息
Traceback (most recent call last): File "c:\Python\Lib\KW-APP-FINAL.py", line 285, in <module> filtered_td = filter_data(date_from, date_to, td) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "c:\Python\Lib\KW-APP-FINAL.py", line 46, in filter_data date = datetime.datetime.strptime(item['Дата'], '%Y-%m-%d %H:%M:%S').date() ~~~~^^^^^^^^ TypeError: list indices must be integers or slices, not str
问题场景
在PySimpleGUI表格应用中实现日期范围过滤功能时触发上述错误,相关代码如下:
过滤函数代码
def filter_data(date_from, date_to, td): filtered_td = [] for item in td: date = datetime.datetime.strptime(item['Дата'], '%Y-%m-%d %H:%M:%S').date() if date_from <= date <= date_to: filtered_td.append(item) return filtered_td
事件循环代码
elif event == 'Покажи': date_from = values['-DATE_FROM-'] date_to = values['-DATE_TO-'] if date_from and date_to: try: date_from = datetime.datetime.strptime(date_from, '%Y-%m-%d %H:%M:%S').date() date_to = datetime.datetime.strptime(date_to, '%Y-%m-%d %H:%M:%S').date() filtered_td = filter_data(date_from, date_to, td) window['-TABLE-'].update(values=filtered_td) except ValueError: sg.popup('Въвели сте неправилен формат на дата. Моля използвайте ГОДИНА-МЕСЕЦ-ДЕН!') else: sg.popup('Моля въведете начална и крайна дата!')
修复方案
错误根源
你传入filter_data的td变量,其中的元素是列表而非字典。PySimpleGUI表格的values参数要求的是「列表的列表」格式(每一行是一个包含各列值的列表),而非字典列表,所以用item['Дата']这种字典键取值的方式会触发类型错误。
具体修复步骤
确认日期列的索引位置
先打印td中某一行的结构,确认日期所在的索引:# 在调用filter_data前添加打印,或者在filter_data函数内添加 print(td[0]) # 输出第一行的结构,比如可能是['2024-01-01 10:00:00', '其他字段值', ...]假设日期是第0列(第一个元素),索引就是
0,请根据实际列顺序调整。修改过滤函数
把item['Дата']改成对应索引的取值,比如日期在第0列:def filter_data(date_from, date_to, td): filtered_td = [] for item in td: # 替换成你实际的日期列索引 date_str = item[0] date = datetime.datetime.strptime(date_str, '%Y-%m-%d %H:%M:%S').date() if date_from <= date <= date_to: filtered_td.append(item) return filtered_td额外验证(可选)
如果运行后仍报错,检查日期字符串的格式是否和strptime中的'%Y-%m-%d %H:%M:%S'完全匹配,比如是否存在多余空格、不同分隔符等问题。
内容的提问来源于stack exchange,提问作者vladimirplamenovkostov
相关产品推荐
相关产品推荐

