2016-12-08 3 views
0

Le titre de la question peut être un peu confus mais je ne sais pas vraiment comment le mieux le mot ... J'ai trouvé le morceau de code suivant qui télécharge un Web à partir du Web en utilisant la bibliothèque urllib2.l'urlib2.URLError et sa raison en python

import urllib2 

def download(url): 
    try: 
     html = urllib2.urlopen(url).read() 
    except urllib2.URLError as e: 
     print 'Download error:', e.reason 
     html = None 
    return html 

Maintenant, s'il arrive que e.code est 404 alors e.reason est simplement une chaîne vide qui signifie qu'il porte absolument aucune information sur ce qui a déclenché l'erreur, donc je ne comprends pas vraiment le point d'utiliser e.reason ici. Il semble qu'il serait plus raisonnable d'imprimer e à la place, mais même si je le change simplement print e il va encore donner quelque chose de gênant: HTTP Error 404: et le signe deux-points est suivi d'une chaîne vide ... Donc il me semble que le code mentionné ci-dessus est un peu maladroit en termes de gestion des exceptions. Est-ce vrai?

+0

Oui, simplement 'imprimer e' serait meilleur. Plus habituel serait de ne pas capturer l'exception du tout, car il ne semble pas être manipulé. Quelle est la question, exactement? – wim

+0

404 signifie que la ressource demandée n'a pas été trouvée. Mieux vaut «imprimer» pour plus de détails. – ichbinblau

+0

@wim Eh bien, j'ai pris ce morceau de code d'un livre et j'étais un peu perplexe par la façon dont l'exception est traitée là-bas, donc je pensais que je manquais quelque chose ... – weeCoder

Répondre

0

Il semblerait que vous puissiez utiliser l'erreur elle-même (print e) ou le code et la raison (print "Download Error:", e.code, e.reason) si vous voulez voir le code 404.

+0

semble donc, je pense que le message (s'il est là) doit être informatif ce qui signifie que les chaînes vides ne devraient pas être autorisés. Je pense que c'est juste du bon sens. – weeCoder