首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么我在Python线程中获得TypeError

为什么我在Python线程中获得TypeError
EN

Stack Overflow用户
提问于 2011-03-30 05:16:35
回答 4查看 17.1K关注 0票数 17

我得到了下面的代码,它基于我在SO上找到的一个例子,但当我运行它时,我得到了一个错误。请帮帮忙,我相信这很简单:

代码语言:javascript
复制
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()

我得到的错误是:

代码语言:javascript
复制
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
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-03-30 05:20:47

错误来自以下行:

代码语言:javascript
复制
threading.Thread(target=listener, args=(port)).start()

args参数需要是一个序列,我认为您的意图是使用一个元组,但是将单个值包含在圆括号中并不能实现这一点。以下是您需要更改的内容:

代码语言:javascript
复制
threading.Thread(target=listener, args=(port,)).start()

下面是一个简单的例子,展示了其中的区别:

代码语言:javascript
复制
>>> (100)  # this is just value 100
100
>>> (100,) # this is a tuple containing the value 100
(100,)
票数 50
EN

Stack Overflow用户

发布于 2011-03-30 05:21:02

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

票数 8
EN

Stack Overflow用户

发布于 2011-03-30 05:22:42

threading.Threadargs参数必须是元组

代码语言:javascript
复制
threading.Thread(target=listener, args=(port)).start()

请注意,不是括号使某个元素成为1元素元组,而是逗号:

代码语言:javascript
复制
>>> type((1))
<type 'int'>
>>> type((1,))
<type 'tuple'>

将以上内容更改为

代码语言:javascript
复制
threading.Thread(target=listener, args=(port,)).start()
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5479033

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档