python: обнаружение потери соединения на ftplib retrlines

Загрузка большого количества файлов через ftplib из разных каталогов. Использование retrlines для загрузки. Следующий фрагмент вызывается для сотен файлов в цикле. Fn относится к удаленному имени файла.

Я пытаюсь найти чистый способ получить errno, чтобы я мог восстановить соединение, если errno>400. Я думал, что проанализирую str(e) из ftplib.all_errors, но ошибка не соответствует... так что взломайте сообщение для разбора сообщения.

Теперь я запутался в отношении формы исключений... предполагается, что она кортежна... но обнаружил, что могу ссылаться на 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 http://docs.python.org/2/library/ftplib.html И посмотрел в десятках постов об исключениях... все еще неясно для продвинутой обработки исключений.

0 ответов

Другие вопросы по тегам