2017-01-27 4 views
0

J'ai utilisé un script qui n'était plus géré et qui télécharge l'ensemble de votre Google Drive sur votre espace de stockage local. Je me suis arrangé pour résoudre quelques problèmes de dépréciation, et le script semblait fonctionner correctement, cependant, comme des moments apparemment aléatoires dans mon script, il va se casser, et je vais recevoir l'erreur suivante.httplib2.IncompleteRead: AttributeError: l'objet 'module' n'a pas d'attribut 'IncompleteRead'

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

Ce sont les modules que je utilise

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 

Et voici le code qui provoque l'erreur

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 

Je suppose cette erreur a quelque chose à voir avec la perte de connexion lors du téléchargement, et je ne suis pas familier avec le module httplib2.

Le code complet se trouve here

Thankyou à l'avance à tous ceux qui peuvent faire la lumière dans une solution possible.

+1

Vous voudrez peut-être vérifier cette [SO post] (http://stackoverflow.com/questions/14442222/how-to-handle-incompleteread-in-python) où il a mentionné à propos de jeter dans une boucle try/catch où vous lisez vos liens ou simplement en envoyant une requête HTTP/1.0 dans votre code. [IncompleteRead using httplib] (http://stackoverflow.com/questions/14149100/incompleteread-using-httplib) pourrait aussi aider. – Teyam

Répondre

1

J'ai mis à jour ce script de sauvegarde de lecteur et j'ai rencontré la même erreur. Je ne l'ai pas encore travaillé ce exception est levée, mais pour révéler ce qu'il est (et qui permet au script de continuer à courir) Je l'ai fait le changement suivant:

Supprimer le:

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

Remplacez-le par ceci:

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

cela a le inconvénient que si elle rencontre une exception cohérente, il peut entrer dans une boucle sans fin. Cependant, il révélera alors l'exception réelle étant levée, de sorte que le "except:" peut être mis à jour de manière appropriée. Ce changement est visible dans le référentiel here.

Si je rencontre à nouveau l'erreur, je mettrai à jour cette réponse avec plus de détails.