Python 无法修复元组索引超出范围
我正在做一个项目,用csv文件制作tkinter GUI,以便于修改。 如果你看一下我定义命令的代码。这给我带来了一个元组索引超出范围的错误。我不明白为什么会这样,我不使用元组。 这是我的代码:Python 无法修复元组索引超出范围,python,tkinter,tuples,Python,Tkinter,Tuples,我正在做一个项目,用csv文件制作tkinter GUI,以便于修改。 如果你看一下我定义命令的代码。这给我带来了一个元组索引超出范围的错误。我不明白为什么会这样,我不使用元组。 这是我的代码: with open("SampleCsv.csv") as csv_file: csv_reader = csv.reader(csv_file, delimiter=';') csv_dict = csv.DictReader(csv_file)
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
谢谢你的帮助
(它周围还有其他代码,但没有与之交互)python抛出的错误不太容易解释。
.format()
的参数用作元组,而不是逐个使用。当它试图填充字符串中的第12个{}
时,它访问第12个参数,但只有11个。因此,该指数超出范围
一个简单的函数来可视化正在发生的事情:
def test(*args):
print("Type:", type(args))
print("Parameters:", args)
test(1,2,3,4)
印刷品:
类型:
参数:(1,2,3,4)
请向我们显示错误的完整堆栈跟踪其中一个格式字符串中的{}
数量与参数数量不匹配。但为什么它调用元组索引