Python threading TypeError:传入参数过多问题求助
解决Python threading中printData()参数不匹配的TypeError问题
错误原因分析
你遇到的「printData()仅接受2个位置参数却传入了8个」,核心原因几乎都是线程创建时传递参数的方式错误:
- 类的实例方法默认第一个参数是
self,所以printData(self, threadString)实际需要2个参数(self由Python自动绑定,你只需要传threadString)。 - 若你创建线程时,把
args写成了"reader"而不是("reader",),Python会把字符串拆成单个字符作为多个参数传入,加上self就凑成了1+7=8个参数("reader"共7个字符),触发错误。
解决步骤
- 确认方法签名:确保
printData的定义是正确的实例方法格式:
def printData(self, threadString): # 你的打印逻辑
修正线程创建代码:
创建线程时,args必须是元组类型,哪怕只有一个参数也要加逗号,避免字符串被拆分成单个字符:- 类内部创建线程:
import threading class ReadWriteDemo: def printData(self, threadString): print(f"{threadString} 读取数据:xxx") def start_threads(self): # 正确写法:args是带逗号的元组 reader_thread = threading.Thread(target=self.printData, args=("Reader线程1",)) reader_thread.start()- 类外部调用实例方法:
if __name__ == "__main__": demo = ReadWriteDemo() # 同样保证args是元组 thread = threading.Thread(target=demo.printData, args=("Reader线程2",)) thread.start()排查其他可能:
- 不要直接把类方法(未绑定实例)传给
target,比如target=ReadWriteDemo.printData,这时候需要手动传入实例作为第一个参数,比如args=(demo, "Reader线程"),但更推荐直接用实例绑定后的方法。
- 不要直接把类方法(未绑定实例)传给
内容的提问来源于stack exchange,提问作者jack-davison
相关产品推荐
相关产品推荐

