python中的线程,创建具有特定字符串输入的线程时出错



据我说,最奇怪的问题花了我很长时间才弄清楚,因为我根本无法理解出了什么问题,无论如何,这里是:

class pod_spawner():
def __init__(self):
self.pod_name="Test"
def bot_creater(self,bot_nr):
for i in range(5):
print(bot_nr + " doing its work")
time.sleep(2)    
def add_thread(self):
threading.Thread(name="Something", target=self.bot_creater, args=("1")).start()

这完全没问题,生成thread,我们是黄金,但是如果我将 args 输入更改为args=("bot_1")而不仅仅是args=("1"),"它会给我抛出一个bot_creater() takes 2 positional arguments but 6 were given"错误。

任何和所有的帮助将不胜感激!

TemporalWolf 是对的,它需要一个元组。如果你只是在字符串周围加上括号,它只是被认为是数学括号。如果添加逗号,python 会将其解释为元组:

threading.Thread(name="Something", target=self.bot_creater, args=("bot_1",)).start()

它将字符串输入转换为元组,如下所示:

tuple(("bob"))
('b', 'o', 'b')

因为

>>> type(("bob"))
<type 'str'>

相反,您希望:

>>> tuple(("bob",))
('bob',)

因为

>>> type(("bob",))
<type 'tuple'>

本质上,它忽略了额外的括号集,直到你给它(element,)然后迫使它将其解释为长度为 1 的元组。

如果您有一个参数,也可以改用list,如下所示:

threading.Thread(name="Something", target=self.bot_creater, args=["bot_1"]).start()

最新更新