Python 如何解决TypeError:向线程函数添加队列后,列表索引必须是整数,而不是str
在Python3.4中工作,并给出下面的代码,在我将Python 如何解决TypeError:向线程函数添加队列后,列表索引必须是整数,而不是str,python,multithreading,Python,Multithreading,在Python3.4中工作,并给出下面的代码,在我将mainQ添加到mainProc调用之前,一切正常。在myFunc中执行线程调用后,返回以下内容: file1proc=threading.Thread(target=myOtherFunc,args=(rawData['file1']['dataIn'],rawData['file1']['CL'],file1Q),name='file1Thread') TypeError:列表索引必须是整数,而不是str import queue impo
mainQ
添加到mainProc
调用之前,一切正常。在myFunc
中执行线程调用后,返回以下内容:
file1proc=threading.Thread(target=myOtherFunc,args=(rawData['file1']['dataIn'],rawData['file1']['CL'],file1Q),name='file1Thread')
TypeError:列表索引必须是整数,而不是str
import queue
import threading
def myOtherFunc(someData,someCL,Q)
output=[somedata,someCL]
Q.put(output)
def myFunc(rawData, Q):
file1Q=queue.Queue()
file2Q=queue.Queue()
file1proc = threading.Thread(target=myOtherFunc, args=(rawData['file1']['dataIn'],rawData['file1']['CL'], file1Q), name='file1Thread')
file2proc = threading.Thread(target=myOtherFunc, args=(rawData['file2']['dataIn'],rawData['file2']['CL'], file1Q), name='file1Thread')
file1proc.start()
file2proc.start()
file1proc.join()
file2proc.join()
output1=file1Q.get()
output2=file2Q.get()
output = [output1, ouput2]
Q.put(output)
data = {'dataIn': [list1], 'CL': [list2]}
fileData = { 'file1': data, 'file2': data}
mainQ=queue.Queue()
mainProc=threading.Thread(target=myFunc, args=([fileData],mainQ), name="mainProcThread")
mainProc.start()
mainProc.join()
final=mainQ.get()
我不明白向参数添加队列是如何导致
dicts
被误解为列表的。我知道它必须很简单。当您将文件数据
dict传递给myFunc
时,您正在将其放入列表中:
args=([fileData],mainQ)
然后,当您试图通过rawData['file1']
内部myFunc
访问dict时,您实际上是在访问列表,它不能将'file1'
字符串作为索引
显然,你不想这么做。改为这样做:
args=(fileData,mainQ)
这个问题应该解决。我猜你本来就有这个:
args=([fileData])
你以为是把fileData
放在一个元组中,但实际上只是把它放在一个列表中,这很正常,因为args
关键字参数需要一个列表或元组
要实际创建一个单元素元组,您需要执行以下操作:
args=([fileData],)
注意后面的逗号。如果您这样做了,您将看到此错误,而不添加队列
您对我最初的设置是正确的,相反,我应该添加后面的逗号。我一次又一次地读到args是一个元组
,没有找到后面的逗号。相反,我沮丧地把arg改成了一个列表。谢谢你的帮助。