我试图在Python 2.7中捕获这个特殊的异常(并且只有这个异常),但我似乎无法找到异常类的文档。有吗?
[Errno 10054] An existing connection was forcibly closed by the remote host
我的代码到目前为止:
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()
错误类型是socket.error,文档是 这里。
尝试修改你的代码,如下所示:
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
您可以尝试做类似的事情:
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()
当您想要过滤异常时,第一步是找出异常类型并将其添加到except子句中。这通常很容易,因为python会将其作为回溯的一部分打印出来。你没有提到类型,但对我来说它看起来像socket.gaierror,所以我就是这样。
下一步是弄清楚异常内部的有趣内容。在这种情况下,`help(socket.gaierror)'可以解决这个问题:我们可以使用一个名为errno的字段来确定我们想要过滤哪些错误。
现在,重新排列代码,以便在重试循环中捕获异常。
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