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