Python:except EOFError:... 无效
我有一个尝试/异常处理的代码块,它会发送一条消息并等待客户端的确认。如果客户端中断了连接,pickle会抛出一个EOFError错误,但下面的代码没有捕捉到这个错误,也没有执行优雅的关闭操作,而是打印了错误的堆栈信息。我猜这和这一行“except 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 个回答
2
在Python 2.x中,写法except a, b
的意思是捕捉类型为a
的异常,并把它赋值给一个叫b
的变量。在你的例子中,这样做会导致EOFError
被忽略。你可以试试下面这种写法:
...
except (socket.error, EOFError):
...
补充一下,在Python 3.0中,捕捉异常值的新写法是except a as b
,而在2.6及以上版本中也可以使用这种写法,不过不是强制的。