Python threading创建线程传参报参数数量不匹配错误如何解决
错误成因
threading.Thread的args参数要求传入目标函数的位置参数序列,Python会遍历该序列,将每一个元素作为独立的位置参数依次传递给target指定的函数。
你代码中直接将字符串"hello"赋值给args,而字符串本身是可迭代对象,Python会自动将其拆分为单个字符组成的序列('h','e','l','l','o'),相当于你给test函数传入了5个独立的位置参数,和test函数定义的1个入参不匹配,因此触发类型错误。
你替换为单个字符"A"时能正常运行,是因为长度为1的字符串拆分后仅1个元素,刚好匹配test的入参数量,但此时传入test的实际是字符'A'而非完整字符串对象,只是二者值一致才没有暴露逻辑问题。
解决方法
将args的赋值改为合法的单元素序列即可,可选两种写法:
- 写法1:使用元组(注意单元素元组必须加末尾的逗号,否则括号会被识别为普通运算括号,不生成元组)
threading.Thread(target = test, args = ("hello",)).start()
- 写法2:使用列表(无额外语法要求,更不容易写错)
threading.Thread(target = test, args = ["hello"]).start()
内容的提问来源于stack exchange,提问作者Phil
相关产品推荐
相关产品推荐

