Python线程字符串参数问题如何解决?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (97)

我有一个Python线程的问题,并在参数中发送一个字符串。

def processLine(line) :
    print "hello";
    return;
dRecieved = connFile.readline();
processThread = threading.Thread(target=processLine, args=(dRecieved));
processThread.start();

其中dRecieved是由连接读取的一行的字符串。它称为一个简单的功能,它现在只有一个打印“hello”的工作。

但是,我收到以下错误

Traceback (most recent call last):
File "C:\Python25\lib\threading.py", line 486, in __bootstrap_inner
self.run()
File "C:\Python25\lib\threading.py", line 446, in run
self.__target(*self.__args, **self.__kwargs)
TypeError: processLine() takes exactly 1 arguments (232 given)

232是我想传递的字符串的长度,所以我想它将它分解成每个字符并尝试传递这样的参数。它正常工作,如果我只是正常调用该函数,但我真的想把它设置为一个单独的线程。

提问于
用户回答回答于

你正试图创建一个元组,但你只是将一个字符串括起来

添加一个额外的',':

dRecieved = connFile.readline()
processThread = threading.Thread(target=processLine, args=(dRecieved,))  # <- note extra ','
processThread.start()

或者使用括号列出一个列表:

dRecieved = connFile.readline()
processThread = threading.Thread(target=processLine, args=[dRecieved]))  # <- 1 element list
processThread.start()

如果注意到,从堆栈跟踪: self.__target(*self.__args, **self.__kwargs)

*self.__args将字符串转换成字符的列表,将它们传递给processLine 函数。如果将它传递给一个元素列表,它会将该元素作为第一个参数传递 - 在你的情况下,即字符串。

扫码关注云+社区

领取腾讯云代金券