无法修复元组索引超出范围

2024-06-26 02:06:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在做一个项目,用csv文件制作tkinter GUI,以便于修改。 如果你看一下我定义命令的代码。这给我带来了一个元组索引超出范围的错误。我不明白为什么会这样,我不使用元组。 这是我的代码:

with open("SampleCsv.csv") as csv_file:
      csv_reader = csv.reader(csv_file, delimiter=';')
      csv_dict = csv.DictReader(csv_file)
      row_count=0
      csv_list=list(csv_reader)
      loc=len(csv_list)
      sowt=set()#set of widget types
      sodv=set()#set of diffrent radiobutton variable
      for lines in range(len(csv_list)):
            if lines==0:
                  pass
            else:
                  row=list(csv_list[lines])
                  widgetType=str(row[5])
                  sowt.add(widgetType)
      if "Radiobutton" in sowt:
            for lines in range(len(csv_list)):
                  if lines==0:
                        pass
                  else:
                        row=list(csv_list[lines])
                        widgetType=str(row[5])
                        if widgetType=="Radiobutton":
                              widgetVar=str(row[6])
                              sodv.add(widgetVar)
      for amount in range(len(sodv)):
            lodv=list(sodv)
            command=r"""global variable_{}, value_{}
variable_{}=IntVar()
value_{}=0""".format(lodv[amount], lodv[amount], lodv[amount], lodv[amount])
            exec(command)
      for lines in range(len(csv_list)):
            print(lines)
            
            if lines==0:
                  pass
            else:
                  row=list(csv_list[lines])
                  index=int(row[0].replace("\ufeff", ""))
                  pinID=int(row[1])
                  pinAlias=str(row[2])
                  tkRow=int(row[3])
                  tkCol=int(row[4])
                  widgetType=str(row[5])
                  if widgetType=="Radiobutton":
                        widgetVar=int(row[6])
                        exec(r"""widgetVal=value_{}+1""".format(widgetVar))
                        command=r"""def pin{}Job(): 
      RegisterPins[{}]=true 
      array_convert_int() 
      msg = str(register) + "\n" 
      arduino.write(msg.encode()) 
      schedule.clear("pin{}Func") 
      return schedule.CancelJob
def pin{}Func():
      RegisterPins[{}]=false
      array_convert_int()
      msg = str(register) + "\n"
      arduino.write(msg.encode())
      if not interval==9999:
            schedule.every(interval).seconds.do(run_threaded, pin{}Job).tag("pin{}Func")
pin{} = Radiobutton(mainTab, text="{}", padx = 20, command=lambda: pin{}Func(), value=widgetValue, variable=variable_{}).grid(column={}, row={}, sticky=W)""".format(pinID, pinID, pinID, pinID, pinID, pinID, pinID, pinAlias, pinID, widgetVar ,tkCol, tkRow)
                  elif widgetType=="Button":
                        command=r"""def pin{}Job(): 
      RegisterPins[{}]=true 
      array_convert_int() 
      msg = str(register) + "\n" 
      arduino.write(msg.encode()) 
      schedule.clear("pin{}Func") 
      return schedule.CancelJob
def pin{}Func():
      RegisterPins[{}]=false
      array_convert_int()
      msg = str(register) + "\n"
      arduino.write(msg.encode())
      if not interval==9999:
            schedule.every(interval).seconds.do(run_threaded, pin{}Job).tag("pin{}Func")
pin{} = Button(mainTab, text="{}", padx = 20, command=lambda: pin{}Func()).grid(column={}, row={}, sticky=W)""".format(pinID, pinID, pinID, pinID, pinID, pinID, pinID, pinID, pinID, pinID, pinID)#.format(pinID, pinID, pinID, pinID, pinID, pinID, pinID, pinAlias, pinID, tkCol, tkRow)    
                  elif widgetType=="Label":
                        command=r"""Label(mainTab, text="{}", padx = 20).grid(column={}, row={}, sticky=W)""".format(pinAlias, tkCol, tkRow)
                  exec(command)

所以它给了我一个元组索引超出范围的错误,我不理解,因为我在这段代码中甚至没有使用元组

哦,还有csv文件:


0;pinID;pinAlias;tkinterColPos;tkinterRowPos;type;variable
1;0;PIN 1;0;0;Button;
2;1;PIN 2;0;1;Button;
3;2;PIN 3;1;0;Radiobutton;1
4;3;PIN 4;1;1;Radiobutton;1
5;4;PIN 5;2;0;Radiobutton;2
6;5;PIN 6;2;1;Radiobutton;2
7;6;PIN 7;3;0;Radiobutton;3
8;7;PIN 8;3;1;Radiobutton;3

谢谢你的帮助

(它周围有其他代码,但不与之交互)


Tags: csvifpinmsgcommandlistintrow
1条回答
网友
1楼 · 发布于 2024-06-26 02:06:41

python抛出的错误不太容易解释。.format()的参数用作元组,而不是逐个使用。当它试图填充字符串中的第12个{}时,它访问第12个参数,但只有11个。因此,该指数超出范围

一个简单的函数来可视化正在发生的事情:

def test(*args):
    print("Type:", type(args))
    print("Parameters:", args)

test(1,2,3,4)

印刷品:

Type: <class 'tuple'>
Parameters: (1, 2, 3, 4)

相关问题 更多 >