2017-07-06 2 views
2

Le code ci-dessous est en cours d'exécution mais quand j'essaie de sortir du code dans lequel il entre une boucle infinie où même si je tape 1, il ne sort pas de la boucle. Je suis un débutant en Python s'il vous plaît quelqu'un peut-il m'aider ??J'ai écrit un code en Python où même si j'utilise une instruction break et continue toujours son aller dans une boucle infinie en Python:

Voici mon code,

import urllib2 
import sys 

urlToRead = ('https://www.google.com') 

crawledWebLinks = {} 

while urlToRead !='': 
    try: 
     urlToRead = raw_input('Please enter the Next weblink to crawl') 
     if urlToRead == '': 
      print ('Ok Existing the Loop') 
      break 
     shortName = raw_input('Please enter a short Name for the Url to Read ' + urlToRead) 
     webfile = urllib2.urlopen(urlToRead).read() 
     crawledWebLinks[shortname] = webfile 
    except: 
     print (sys.exc_info()[0]) 
     stopOrproceed = raw_input('You want to Stop or Continue, Please type in 1 to stop or anything else to Continue') 
     if stopOrproceed == 1: 
      print ('Okies we are stopping') 
      break 
     else: 
      print ('lets continue') 
      continue 


print (crawledWebLinks.keys()) 
+1

'stopOrproceed' est une chaîne. Il ne sera jamais comparable à l'entier 1. Votre instruction if devrait probablement être quelque chose comme 'stopOrProceed ==" 1 "' ou 'int (stopOrProceed) == 1'. –

+3

'raw_input' renvoie une chaîne. Votre entrée est '" 1 "', pas '1'. – khelwood

Répondre

2

Les quelques lignes suivantes sont celles qui causent problème,

stopOrproceed = raw_input('You want to Stop or Continue, Please type in 1 to stop or anything else to Continue') 
if stopOrproceed == 1: 
    print ('Okies we are stopping') 
    break 

Vous voyez raw_input obtient l'entrée et le stocke sous forme de chaîne. Donc, après avoir obtenu la valeur de l'utilisateur. votre variable stopOrproceed aurait "1"

Et lorsque vous vérifiez pour stopOrproceed==1 ->"1"==1. Ce qui n'est certainement pas égal en Python. Donc toujours faux est évalué Et donc le contrôle ne va jamais à l'intérieur du if et donc vous jamais break.

Essayez de changer à ce que,

if stopOrproceed == "1": 
     print ('Okies we are stopping') 
     break 
+0

la dernière suggestion (typecasting) est une mauvaise idée, car il conduira probablement à un TypeError indésirable – Dimgold

+0

Oui, je sais peut-être que je devrais mentionner que .. Merci mon pote @Dimgold – void

+0

merci beaucoup Vishnu .... cela a bien fonctionné I utilisé avec int et avec la chaîne a essayé les deux et cela a bien fonctionné. Merci beaucoup. :) – Shaumyabrata