代码运行UI界面可以正常显示,输入信息后报错:
songs_data = self.response_data['data']['list']
~~~~~~~~~~~~~~~~~~^^^^^^^^
KeyError: 'data'
部分源码如下:
if len(search_input) >0:
search_url = 'http://www.kuwo.cn/api/www/search/searchMusicBykeyWord?'
"""key携带的值,是我们要搜索的值;pn,按照常量,我们猜测,其为页数;rn,我们猜测其为一页显示的数量"""
search_data = {
'key':search_input,
'pn':'1',
'rn': '80',
'httpsStatus':'1',
'reqId':'858597c1-b18e-11ec-83e4-9d53d2ff08ff'
}
try:# params 接收一个字典或者字符串的查询参数,字典类型自动转换为url编码,不需要urlencode()
self.response_data = requests.get(search_url,params=search_data,headers=headers,
timeout=20).json()
songs_data = self.response_data['data']['list']
if int(self.response_data['data']['total'])<=0:
mes_box.showerror(title='错误',message='搜索:{} 不存在.'.format(search_input))
else:
for i in range(len(songs_data)):
self.show_result.insert('',i,values=(i+1,songs_data[i]['artist'],
songs_data[i]['name'],
songs_data[i]['album']))
这说明查询返回的数据结构变了。重新确认一下返回的内容。
这报错是说self.response_data里面没有'data'这个key
你打印一下 self.response_data 看看是不是根本就没获取到数据,或者数据结果不是你想的这样。然后再重新解析就好了
【以下回答由 GPT 生成】
报错提示的是KeyError: 'data',意味着在self.response_data
这个字典中没有一个键名为'data'的键。可能是请求的接口返回的数据结构或者键名发生了变化导致的错误。要解决这个问题,可以按照以下步骤进行排查和修复:
检查接口返回的数据结构是否发生变化:可以在代码中添加打印语句,输出self.response_data
的值,查看具体的返回数据结构。例如,在请求数据后的代码中添加一行print(self.response_data)
。
查看打印输出的返回数据结构,确定数据结构中是否存在键名为'data'的键。如果打印输出的数据结构没有'data'键,那么代码中就不能直接访问self.response_data['data']
。
如果数据结构变化了,需要针对新的数据结构进行相应地修改代码。根据打印输出的数据结构,查找到正确的键名来获取所需要的数据。
根据当前提供的代码和问题描述,需要进一步输出self.response_data
的值来确定具体问题所在。请将打印输出的结果提供出来,以便进一步分析和提供准确的解决方案。