Python:除了厄弗罗尔:。。。没有

2024-04-29 19:59:27 发布

您现在位置:Python中文网/ 问答频道 /正文

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

        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

Tags: 代码self消息客户端堆栈错误errorsocket
2条回答

break导致错误,它只能在for循环或try/finally块中使用,而不能在try/except中使用,请参见docsmore

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

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

编辑:详细说明一下,Python 3.0中的新语法,以及2.6+中用于捕获异常值的新语法是except a as b

相关问题 更多 >