Python 如何解决TypeError:向线程函数添加队列后,列表索引必须是整数,而不是str

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

在Python3.4中工作,并给出下面的代码,在我将
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改成了一个列表。谢谢你的帮助。