2011-03-11 3 views
0

J'ai un bloc try/except qui envoie un message et attend la confirmation du client. Si le client se termine, pickle déclenche une EOFError, mais le code ci-dessous n'attrape pas l'erreur et exécute l'arrêt gracieux. Il imprime à la place la trace de la pile. Je suppose qu'il doit faire avec la ligne "except socket.error, EOFError:" - est-ce que j'emploie la syntaxe fausse pour manipuler à la fois socket.error et EOFError là?Python: sauf EOFError: ... ne fonctionne pas

 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 

Répondre

2

En Python 2.x, le formulaire except a, b intercepte une exception de type a et l'affecte à une variable appelée b. Dans votre cas, EOFError sera ignoré. Essayez ceci:

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

Edit: pour élaborer, la nouvelle syntaxe de Python 3.0 et disponible, mais pas nécessaire, dans 2.6+, pour capturer la valeur d'une exception est except a as b.

+0

étonnamment peu intuitif pour python, merci pour l'info. –

0

break provoque l'erreur, il ne peut être utilisé à l'intérieur d'une boucle ou d'un bloc fortry/finally, pas try/except, voir docs et more.

+0

le bloc entier est à l'intérieur d'une boucle en fait, j'aurais dû inclure ce bit. –