我有以下代码,这些代码基于我在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
错误来自以下行:
threading.Thread(target=listener, args=(port)).start()
该args参数必须是一个序列,我想您的意图是使用元组,但是将单个值包装在括号中并不能实现这一点。您需要将其更改为:
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,)