Python:除了EOFError:...不起作用

时间:2011-03-11 19:11:57

标签: python exception-handling eoferror

我有一个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

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

break导致错误,它只能在for循环或try/finally块中使用,而不能在try/except内使用,请参阅docs和{ {3}}