首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >除了EOFError:..不起作用

除了EOFError:..不起作用
EN

Stack Overflow用户
提问于 2011-03-12 03:11:57
回答 2查看 8.6K关注 0票数 0

我有一个try/except块,它发送一条消息并等待客户端的确认。如果客户端终止,pickle将引发一个EOFError,但下面的代码不会捕获错误并执行正常关闭。相反,它打印堆栈跟踪。我假设它与“除了socket.error,EOFError:”这一行有关-我是否使用了错误的语法来处理那里的socket.error和EOFError?

代码语言:javascript
复制
        try:
            msgs = [1]
            self.sock.send(pickle.dumps(msgs))
            rdy = pickle.loads(self.sock.recv(2097152))
        except socket.error, EOFError: 
            print 'log socketmanager closing'
            self.terminate()
            break
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-12 03:17:43

在Python2.x中,表单except a, b捕获a类型的异常,并将其赋给一个名为b的变量。在您的情况下,这将导致EOFError被忽略。试着这样做:

代码语言:javascript
复制
...
except (socket.error, EOFError):
    ...

编辑:更详细地说,Python3.0中的新语法是except a as b,虽然不是必需的,但在2.6+中可用于捕获异常的值。

票数 2
EN

Stack Overflow用户

发布于 2011-03-12 03:13:05

break是导致错误的原因,它只能在for循环或try/finally块中使用,不能在try/except中使用,请参阅docsmore

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5277277

复制
相关文章

相似问题

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