python 中的异常list index out of range

最近在做一个复选框删除的模块
 # 删除
    def delButtonClicked(self):
        try:
            conn = sqlite3.connect('../db/sample.db')
            cur = conn.cursor()
            data = cur.fetchall()
            vol = len(data[0])
            row = len(data)
            row_box_list = []
            for i in range(row):
                if self.tableWidget.cellWidget(i, vol - 7).isChecked() is True:
                    reply = QMessageBox.information(self, '确认', '确定删除数据?', QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
                    if reply == QMessageBox.Yes:
                        row_box_list.append(i)
                        row_box_list.reverse()  # 将数据进行降序
                    for j in row_box_list:
                        self.tableWidget.removeRow(j)  # 删除选中行数据
                    else:
                        print(QMessageBox.information(self, "提醒", "请选择要删除的数据", QMessageBox.Yes, QMessageBox.Yes))
        except Exception as e:
            print('异常', e)

报错:list index out of range

list index out of range 是指向 vol = len(data[0]) ?

代码里省略了读取数据?,都没有查询, 咋cur.fetchall() ?

个人认为是缩进错误导致程序错误,python的代码嵌套性有赖于缩行。当然代码本身逻辑也是有问题的
比较明显的是for j这一块在for i的循环体里面,所以它会反复的抓row_box_list中的行号去tabelWidget中删除,所以嘛除非只删除一条记录,否则一定会删除比预期多得多的行--这是一处逻辑错误。
当执行到检查tabelWidget最后一条记录的时候,由于此前已经做了删除的操作,所以程序期望的最后一行其实已经不存在了,所以会爆出索引超限的错误--只有当你不删除任何记录或仅仅删除最后一条记录的时候才不会出错。
建议把两个for循环由嵌套关系改成顺序执行关系,第一个for登记所有需要删除的记录,而后用第二个for来删除它们