gpt4 book ai didi

python - 将队列添加到线程函数后如何解决 TypeError : list indices must be integers, not str

转载 作者:太空宇宙 更新时间:2023-11-04 06:00:44 25 4
gpt4 key购买 nike

在 Python 3.4 中工作并给出下面的代码,一切正常,直到我将 mainQ 添加到 mainProc 调用。一旦我在 myFunc 中执行线程调用,就会返回以下内容:

file1proc = threading.Thread(target=myOtherFunc, args=(rawData['file1']['dataIn'],rawData['file1']['CL'], file1Q), name='file1Thread ')
类型错误:列表索引必须是整数,而不是 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 被误解为 list 的。我知道它必须简单。

最佳答案

当您将 fileData 字典传递给 myFunc 时,您将其放入列表中:

args=([fileData],mainQ)

然后,当您尝试通过 myFunc 中的 rawData['file1'] 访问字典时,您实际上是在访问列表,它不能接受 'file1' 字符串作为索引。

显然,您不想那样做。改为这样做:

args=(fileData,mainQ)

问题应该消失了。我猜你原来有这个:

args=([fileData])

你认为是将 fileData 放在一个元组中,但实际上只是将它放在一个列表中,这工作正常,因为 args 关键字参数需要一个列表或元组。

要真正创建一个单元素元组,您需要完成:

args=([fileData],)

注意结尾的逗号。如果您这样做了,您将在不添加 Queue 的情况下看到此错误。

关于python - 将队列添加到线程函数后如何解决 TypeError : list indices must be integers, not str,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25191315/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com