为什么我在Python的Threading中会得到TypeError错误?

6 浏览
0 Comments

为什么我在Python的Threading中会得到TypeError错误?

我有以下代码,基于我在SO上发现的一个示例,但运行时出现错误。请帮忙,我相信很简单:

def listener(port):
    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    sock.bind(('',port))
    sock.settimeout(1) # n second(s) timeout
    try:
        while True:
            data, addr = sock.recvfrom(1024)
            print data
    except socket.timeout:
        print 'Finished'
def startListenerThread(port):
    threading.Thread(target=listener, args=(port)).start()

我得到的错误是:

Exception in thread Thread-1:
Traceback (most recent call last):
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/threading.py", line 522, in __bootstrap_inner
    self.run()
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/threading.py", line 477, in run
    self.__target(*self.__args, **self.__kwargs)
TypeError: listener() argument after * must be a sequence, not int

admin 更改状态以发布 2023年5月20日
0
0 Comments

在最后一行中,args=(port)等价于args=port。你需要将port放入一个合适的元组中,就像这样:args=(port,)

0
0 Comments

错误来自以下行:

threading.Thread(target=listener, args=(port)).start()

args参数需要是一个序列,我想你的意图是使用元组,但是如果将单个值括在括号中,则无法实现此目的。这是你需要改变的内容:

threading.Thread(target=listener, args=(port,)).start()

这里是一个简单的例子,展示了它们之间的区别:

>>> (100)  # this is just value 100
100
>>> (100,) # this is a tuple containing the value 100
(100,)

0