1
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() を呼び出すと、正常に動作します。問題は、スレッドに入れる必要があることです。

4

1 に答える 1

4

argsシーケンスである必要がありますが、文字列を渡しています:

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

コンマを追加します。

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

タプルを作成するには、少なくとも 1 つのコンマが必要です。多くのコンテキストでは、括弧はオプションです:

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

コンマを使用しないと、29 個の個々の文字のシーケンスを関数に渡しmessage()ます。

于 2013-10-09T09:24:13.513 に答える