我有一个FTP连接,我从中下载了许多文件并在其间处理它们。我希望能够检查我的FTP连接之间没有超时。所以代码看起来像:
conn = FTP(host='blah')
conn.connect()
for item in list_of_items:
myfile = open('filename', 'w')
conn.retrbinary('stuff", myfile)
### do some parsing ###
如果在### do some parsing ###
行中超时,我如何检查我的FTP连接?
答案 0 :(得分:19)
发送NOOP命令。这只会检查连接是否仍然存在,如果你定期这样做,它可以使连接保持活动状态。
例如:
conn.voidcmd("NOOP")
如果连接出现问题,则FTP对象将抛出异常。您可以在documentation中看到,如果出现错误,则会抛出异常:
socket.error和IOError:这些是由套接字连接引发的,很可能是您感兴趣的。
exception ftplib.error_reply:从服务器收到意外回复时引发异常。
exception ftplib.error_temp:当收到表示临时错误的错误代码(响应代码在400-499范围内)时引发异常。
exception ftplib.error_perm:当收到表示永久性错误的错误代码(响应代码在500-599范围内)时引发异常。
exception ftplib.error_proto:当从服务器收到不符合文件传输协议响应规范的回复时引发的异常,即以1-5范围内的数字开头。
因此,您可以使用try-catch block来检测错误并相应地处理错误。
例如,此代码示例将捕获IOError,告诉您它,然后重试该操作:
retry = True
while (retry):
try:
conn = FTP('blah')
conn.connect()
for item in list_of_items:
myfile = open('filename', 'w')
conn.retrbinary('stuff', myfile)
### do some parsing ###
retry = False
except IOError as e:
print "I/O error({0}): {1}".format(e.errno, e.strerror)
print "Retrying..."
retry = True