据我说,最奇怪的问题花了我很长时间才弄清楚,因为我根本无法理解出了什么问题,无论如何,这里是:
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()