TypeError:message()只取1个位置参数(给定29个)

时间:2013-10-09 09:21:57

标签: python multithreading python-3.x

def message(text):
    windll.user32.MessageBoxW(0, text, 'Message', 0x20)
def otherfunc(startDistance, hops, i, formats, j):
    text = str('Distance: ' + str((startDistance + (hops * i))) + '. Format: ' + formats[j])
    threading.Thread(target=message, args=(text)).start()

由于某种原因,即使您可以清楚地看到该文本是一个字符串,此代码也会产生该函数获取29个参数的错误。 任何人都知道如何解决? 此外,在没有线程的情况下调用message()时,它可以正常工作。问题在于它需要它在一个线程中。

1 个答案:

答案 0 :(得分:4)

args必须是一个序列,但是你传入了字符串:

threading.Thread(target=message, args=(text)).start()

添加逗号:

threading.Thread(target=message, args=(text,)).start()

你需要至少一个逗号来制作元组;在许多情况下,括号是可选的:

>>> ('foo')
'foo'
>>> 'foo',
('foo',)

如果没有逗号,则会将29个单独字符的序列传递给message()函数。