2010-05-26 4 views
0

Donc, simplement je veux être en mesure d'exécuter un pour à travers une liste d'URL, si l'un échoue, je veux continuer à essayer le suivant.Python urllib2 instruction multiple try sur urlopen()

J'ai essayé d'utiliser ce qui suit, mais malheureusement, il jette et exception si la première URL ne fonctionne pas.

servers = ('http://www.google.com', 'http://www.stackoverflow.com') 
for server in servers: 
    try: 
     u = urllib2.urlopen(server) 
    except urllib2.URLError: 
     continue 
    else: 
     break 
else: 
    raise 

Des idées?

Merci d'avance.

+0

À quelle exception est-il lancé? Vous devrez peut-être prendre plus d'erreurs que juste urllib2.URLError –

+0

Lancers urllib2.URLError « urllib2.URLError: » – Kura

Répondre

0
servers = ('http://www.google.com', 'http://www.stackoverflow.com') 
for server in servers: 
    try: 
     u = urllib2.urlopen(server) 
    except urllib2.URLError: 
     continue 
    else: 
     break 
else: 
    raise 

Ce code casse de la boucle si la connexion url ne provoque une erreur (else: break partie).

Voulez-vous le 2ème utilisé seulement si le premier échoue?

modifier: Je pense que le else: suit la boucle doit raise en raison de la break, mais dans mon test rapide qui ne fonctionne pas ... parce que ma compréhension de for/else a eu tort

+0

Le seulement devrait se poursuivre si la La première url provoque une exception, cela devrait être le cas pour n'importe quel nombre d'URL dans la liste. E.g. Si 1 et 2 échouent alors le troisième devrait être essayé. – Kura

0

Ainsi, le problème s'est avéré être une erreur de l'utilisateur. J'essayais des domaines stupides comme "wegwegwe.com" mais je n'ai jamais eu un domaine utilisable dans la liste, donc finalement il a juste soulevé l'exception.

Erreur de l'utilisateur.

Questions connexes