FTP挂起/ 421超时的Python错误处理

时间:2015-10-21 21:56:26

标签: python error-handling ftp timeout ftplib

我有一个脚本(下面)将html文件推送到服务器。 95%的时间都有效。但是,大约5%的时间,服务器发生故障并且尝试连接挂起。它停转15分钟(900秒)然后失败。

    ftp = FTP('[FTP ADDRESS HERE]')
    ftp.login('[USERNAME]','[PASSWORD]')
    converted_HTML_string = io.BytesIO(HTML_string)
    ftp.storbinary('STOR public_html/home.html', converted_HTML_string)

同样,这在95%的时间都有效。在它没有的5%中,如果我在挂起时手动中断它并且只是再次重新运行请求 - 那么它可以正常工作。这似乎是由临时服务器故障引起的。我无法控制服务器质量。

真正的问题是挂起太长了。我希望能够设置一个时间限制(如30秒)挂起的时间长度,然后让代码显示"重新运行此ftp命令直到成功为止。"

这可能吗?还有其他方法可以解决这个问题吗?

谢谢!

1 个答案:

答案 0 :(得分:3)

在ftp服务器上设置通道超时。某些接口(例如FileZilla)允许您配置通道超时。幸运的是,Python的FTP包就是其中之一。有关详细信息,请参阅documentation。 在此期间,只需尝试超时参数:

ftp = FTP('[FTP ADDRESS HERE]', timeout=30)

Maxim Lott(OP)能够通过以下方式捕获超时错误,重试连接直到它起作用:

import socket 
except socket.timeout, e: