执行Python操作MySQL代码时遇元组/字典索引越界错误,求排查解决
Python操作MySQL的IndexError问题排查与修复
错误根源
tuple index out of range:出现在排序代码行。dict.items()返回的每个元素是(姓名, (身高, 体重))的二元组,你写的x[2]不存在——每个元素只有x[0](键)和x[1](值,是个二元组),索引最多到1。dict index out of range:大概率是第一个错误引发的连锁问题,或者如果数据库查询结果的字段数量和循环解构的变量数不匹配(比如某条记录缺失字段),但核心问题还是排序逻辑错误。
修复后的完整代码
import mysql.connector cnx = mysql.connector.connect(user='root', password='', host='127.0.0.1', database='employees') cursor = cnx.cursor() # 保留有效查询语句,删除冗余的第一行query query = "SELECT Name, Weight, Height FROM employer ORDER BY Height DESC, Weight" cursor.execute(query) emp_dict = {} # 确保每条查询结果能正确解构为三个字段 for Name, Weight, Height in cursor: emp_dict[Name] = (Height, Weight) # 修正排序key:取值元组里的身高和体重作为排序依据 sorted_list = sorted(emp_dict.items(), key=lambda x: (x[1][0], x[1][1]), reverse=True) for item in sorted_list: print(item[0], item[1][0], item[1][1]) cnx.close()
额外注意事项
- 别用
dict、list这类Python内置类型名当变量名,会覆盖内置函数,改成emp_dict、sorted_list更稳妥。 - 如果数据库里有重复的
Name,后面的记录会覆盖前面的(字典键唯一),这种情况可以考虑用列表存储,或者结合员工ID作为字典的键。 - 建议加异常捕获处理(比如数据库连接失败、查询字段不匹配),让代码更健壮。
内容的提问来源于stack exchange,提问作者Shahram Samar
相关产品推荐
相关产品推荐

