2017-09-06 5 views
0

J'ai ce script pour analyser un site Web et trouver les articles dont j'ai besoin ..Où et quelle exception dois-je utiliser? Urllib python3

from socket import timeout 
from urllib.request import Request, urlopen, URLError 
import bs4,urllib.parse 
def track(self): 
    for _object in _objects: 
     req = Request('http://example.com/item.php?id='+str(_object)) 
     req.add_header('User-Agent', 
         'Mozilla 5.0') 
     _URL = urlopen(req).read() 
     soup = bs4.BeautifulSoup(_URL, "html.parser") 
     allResults = [] 
     i = 1 

     for hit in soup.findAll('cite'): 
      if ("% Off" in hit.text): 
       allResults.append(str(i) + ". " + hit.text + " | Item => " + _object) 
       i += 1 

     if (len(allResults) == 0): 
      print("No result found for this item => " + _object) 
     else: 
      for element in allResults: 
       print(element) 

Je veux lancer une exception, donc quand la connexion a échoué sur le site, ou pour toute autre raison, il couldn » Je sais que je dois utiliser socket.timeout, mais où dois-je le mettre dans le code?

Répondre

1

Enroulez le appel urlopen dans un essai: sauf appel:

try: 
    _URL = urlopen(req).read() 
except Exception as e: 
    print("Something happened wrong: {}".format(e)) 
    # do something, eg: continue 
+0

Que se passera au reste du code? si je lance l'exception, la ligne suivante sera exécutée après l'exception, où j'ai défini la variable de soupe – DarkSuniuM

+1

Cela dépend de vous, mais gardez à l'esprit que vous attrapez l'exception, sans la lancer (sauf si vous le souhaitez). Comme vous le faites en boucle, appelez 'continue' et continuez avec le' _object' suivant –