0

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

        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
4

2 回答 2

2

在 Python 2.x 中,表单except a, b捕获类型异常a并将其分配给名为b. 在您的情况下,这将导致EOFError被忽略。试试这个:

...
except (socket.error, EOFError):
    ...

编辑:详细说明,Python 3.0 中的新语法,在 2.6+ 中可用但不是必需的,用于捕获异常的值是except a as b.

于 2011-03-11T19:17:43.103 回答
0

break导致错误,它只能在for循环或try/finally块内使用,而不是,try/except参阅文档等。

于 2011-03-11T19:13:05.457 回答