httplib2.IncompleteRead: AttributeError: объект «модуль» не имеет атрибута «IncompleteRead»

Я использовал сценарий, который больше не поддерживается, который загружает весь ваш Google Диск в локальное хранилище. Мне удалось исправить несколько проблем, связанных с амортизацией, и скрипт, казалось, работал гладко, однако, поскольку, казалось бы, случайные моменты в моем скрипте, он сломается, и я получу следующую ошибку.

File "drive.py", line 169, in download_file
    except httplib2.IncompleteRead:
AttributeError: 'module' object has no attribute 'IncompleteRead'

Это модули, которые я использую

import gflags, httplib2, logging, os, pprint, sys, re, time
import pprint


from apiclient.discovery import build
from apiclient.discovery import build
from oauth2client.file import Storage
from oauth2client.client import AccessTokenRefreshError, flow_from_clientsecrets
from oauth2client.tools import run_flow

И вот код, который вызывает ошибку

 if is_google_doc(drive_file):
    try:
        download_url = drive_file['exportLinks']['application/pdf']
    except KeyError:
        download_url = None
else:
    download_url = drive_file['downloadUrl']
if download_url:
    try:
        resp, content = service._http.request(download_url)
    except httplib2.IncompleteRead:
        log( 'Error while reading file %s. Retrying...' % drive_file['title'].replace( '/', '_' ) )
        print 'Error while reading file %s. Retrying...' % drive_file['title'].replace( '/', '_' )
        download_file( service, drive_file, dest_path )
        return False
    if resp.status == 200:
        try:
            target = open( file_location, 'w+' )
        except:
            log( "Could not open file %s for writing. Please check permissions." % file_location )
            print "Could not open file %s for writing. Please check permissions." % file_location 
            return False
        target.write( content )
        return True
    else:
        log( 'An error occurred: %s' % resp )
        print 'An error occurred: %s' % resp
        return False
else:
    # The file doesn't have any content stored on Drive.
    return False

Я предполагаю, что эта ошибка как-то связана с потерей соединения во время загрузки, и я не знаком с модулем httplib2.

Полный код можно найти здесь

Заранее спасибо всем, кто может пролить свет на возможное исправление.


person Tom N    schedule 27.01.2017    source источник
comment
Вы можете проверить этот сообщение SO, в котором упоминалось о попытке /catch, когда вы читаете свои ссылки или просто отправляете запрос HTTP/1.0 в своем коде. Также может помочь http://stackoverflow.com/questions/14149100/incompleteread-using-httplib.   -  person Teyam    schedule 28.01.2017


Ответы (1)


Я обновлял этот сценарий резервного копирования диска и столкнулся с той же ошибкой. Я еще не понял, какое исключение выдается, но чтобы показать, что это такое (и позволить скрипту продолжать работать), я внес следующее изменение:

Удали это:

-        except httplib2.IncompleteRead:
-            log( 'Error while reading file %s. Retrying...' % drive_file['title'].replace( '/', '_' ) )

Замените его на это:

+        except Exception as e: #httplib2.IncompleteRead: # no longer exists
+            log( traceback.format_exc(e) + ' Error while reading file %s. Retrying...' % drive_file['title'].replace( '/', '_' ) )

У этого есть обратная сторона: если он постоянно сталкивается с исключением, он может войти в бесконечный цикл. Однако затем он покажет фактическое выбрасываемое исключение, поэтому «кроме:» можно соответствующим образом обновить.

Это изменение видно в репозитории здесь.

Если я снова столкнусь с ошибкой, я обновлю этот ответ более подробно.

person Jude Hungerford    schedule 04.05.2017