python:检测在ftplib retrlines上丢失的连接

时间:2015-02-02 15:34:13

标签: python exception ftp connection ftplib

通过ftplib从不同目录下载大量文件。使用retrlines进行下载。在循环中为100个文件调用以下代码段。 fn指的是远程文件名。

我正在尝试找到干净的方式来获取errno,以便我可以恢复连接,如果errno> 400。我以为我会从ftplib.all_errors中解析str(e)但是errno是不一致的...所以把hack解析为消息。

我现在对异常的形式感到困惑... e应该是元组...但发现我可以引用e.errno / e.strerror。由于FTP RETR错误(行> 8192)是间歇性的......不确定哪种方法最好,所以我决定发布这个问题。任何提示都会有所帮助。

   try:
        results = ftpID.retrlines("RETR " + fn, handler)
        return True
   except ftplib.all_errors as e:
        logging(str(cmd) + " (gettxt.ftp)"
                     +"FTP ERROR({0}): {1} on {2]".format(e.errno, e.strerror, fn))
        # Check for connection lost, line > 8192  -- connection is lost
        # Doc on ftp exception ftplib.all_errors is unclear about errno. messy
        # some str(e) does not give errno but others do?
        # OLD WAY: if str(e).find('8192') != -1 :
        if e.strerror.find('8192') != -1 :
            logging(" : Fatal FTP ERROR - connection lost")
            close()
            ftpID = None
        # try: self.ftpID.voidcmd("NOOP") ; exception: self.ftpID = None; return None
        return False
    except Exception as e:
        logging(str(cmd) + " (gettxt) " + str(e))
        return False

PS。我知道文档: http://docs.python.org/2/library/ftplib.html#ftplib.error_reply http://docs.python.org/2/library/ftplib.html#ftplib.all_errors 并查看了十个例外帖子......对于异常的高级处理仍然不清楚。

0 个答案:

没有答案