python中的线程,使用特定字符串inpu创建线程时出错

2024-05-16 00:56:37 发布

您现在位置: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"错误。你知道吗

任何帮助都将不胜感激!你知道吗


Tags: nameintestselfforinitdefbot
3条回答

临时狼是对的,它需要一个元组。如果你把括号放在一个字符串上,它就是数学括号。如果添加逗号,python会将其解释为元组:

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

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

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的元组。你知道吗

相关问题 更多 >