У меня есть ниже код работает в Python 2.7х:Побег из вложенного цикла в Python
def captureAlbumLinks():
for page in index_pages: # index_pages is a list of URLs
resp = connect_tor(page)
soup = BeautifulSoup(resp.read(), from_encoding=resp.info().getparam('charset'))
try:
# The below two variables relate to URLs of type string
x = pickle.load(open("last_passworded_album.p", "rb"))
y = pickle.load(open("last_accessible_album.p", "rb"))
except:
print "There is no pickle file"
for a in soup.find_all('a', href=True):
if (root_url + a['href']) == x or (root_url) + a['href'] == y:
break
elif "passchk.php" in a['href']:
passworded_albums.append(root_url + a['href'])
elif "search.php" in a['href'] or "switch.php" in a['href']:
pass
else:
if ".html" in a['href']:
accessible_albums.append(root_url + a['href'])
В сущности, «если (root_url + а [ 'HREF']) == х или (root_url) + a ['href'] == y: ", я не хочу, чтобы какой-либо из elifs запускался и хотел выйти из 'для цикла'. Тем не менее, даже если существует оператор if, выполняется true (проверено с помощью оператора печати), мой код, похоже, запускается на следующий «elif». Я думаю, что на данный момент я просто ломаюсь от цикла «if», а не цикла «for».
Я чувствую, что это проблема с отступом, но попытался переместить «перерыв», но без радости.
Может ли кто-нибудь помочь?
он идет в elif, потому что ваш, если никогда не оценивает True, что такое x и y? я бы также предложил распечатать 'root_url + a ['href'])' –
Вы говорите «вложенные циклы», я вижу только один ... 'break' не имеет взаимодействия с операторами' if', если этот блок работает, если будет вырваться из этого цикла 'for'. –
Спасибо Padraic. X и Y по сути являются URL-адресами, которые будут соответствовать строке, образованной «root_url» + a ['href'] – thefragileomen