我有一个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发布于 2011-03-12 03:17:43
在Python2.x中,表单except a, b捕获a类型的异常,并将其赋给一个名为b的变量。在您的情况下,这将导致EOFError被忽略。试着这样做:
...
except (socket.error, EOFError):
...编辑:更详细地说,Python3.0中的新语法是except a as b,虽然不是必需的,但在2.6+中可用于捕获异常的值。
发布于 2011-03-12 03:13:05
break是导致错误的原因,它只能在for循环或try/finally块中使用,不能在try/except中使用,请参阅docs和more。
https://stackoverflow.com/questions/5277277
复制相似问题