J'essaie d'attraper cette exception particulière (et seulement cette exception) dans Python 2.7, mais je ne semble pas pouvoir trouver de documentation sur la classe d'exception. Est-ce qu'il y a un?
[Errno 10054] An existing connection was forcibly closed by the remote Host
Mon code jusqu'ici:
try:
# Deleting filename
self.ftp.delete(filename)
return True
except (error_reply, error_perm, error_temp):
return False
except # ?? What goes here for Errno 10054 ??
reconnect()
retry_action()
Le type d'erreur est socket.error, la documentation est ici ..__ Essayez de modifier votre code comme ceci:
import socket
import errno
try:
Deleting filename
self.ftp.delete(filename)
return True
except (error_reply, error_perm, error_temp):
return False
except socket.error as error:
if error.errno == errno.WSAECONNRESET:
reconnect()
retry_action()
else:
raise
Lorsque vous souhaitez filtrer les exceptions, la première étape consiste à déterminer le type d'exception et à l'ajouter à une clause except. C'est normalement facile, car python l’imprimera dans le cadre d’une trace. Vous ne mentionnez pas le type, mais ça ressemble à socket.gaierror pour moi, alors je vais avec ça.
L'étape suivante consiste à déterminer ce qui est intéressant à l'intérieur de l'exception. Dans ce cas, `help (socket.gaierror) 'fait l'affaire: il existe un champ appelé errno que nous pouvons utiliser pour déterminer les erreurs à filtrer.
Réorganisez maintenant votre code afin que l'exception soit interceptée dans une boucle de nouvelle tentative.
import socket
retry_count = 5 # this is configured somewhere
for retries in range(retry_count):
try:
# Deleting filename
self.ftp.delete(filename)
return True
except (error_reply, error_perm, error_temp):
return False
except socket.gaierror, e:
if e.errno != 10054:
return False
reconnect()
return False
Vous pouvez essayer de faire quelque chose comme:
try:
# Deleting filename
self.ftp.delete(filename)
return True
except (error_reply, error_perm, error_temp):
return False
except Exception, e:
print type(e) # Should give you the exception type
reconnect()
retry_action()