2011-03-11 41 views
0

我有一个try/except块发送消息并等待客户端的确认。如果客户端终止,pickle会引发EOFError,但下面的代码不会捕获错误并执行正常关闭。它反而打印堆栈跟踪。我认为它必须做的“除了socket.error,EOFError:” - 我使用错误的语法来处理socket.error和EOFError那里?Python:除了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

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

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

编辑:阐述,新的语法在Python 3.0,和可用的,但并不是必需的,在2.6+,用于捕获异常的价值except a as b

+0

对于python来说,这非常不直观,谢谢你的信息。 – 2011-03-12 20:51:51

0
break

导致错误,它只能被一个for环或try/finally块,不try/except内使用,参见docsmore

+0

整个程序块实际上是一个循环的内部,我应该包含那一点。 – 2011-03-12 22:53:36