У вашего try:
нет except:
или finally:
.
for stat in key_stats_on_main:
page_stat1 = soup.find(text = stat)
try: # <--------------- this one here
page_row1 = page_stat1.find_parent("tr")
try:
page_statnum1 = page_row1.find_all("span")[1].contents[1]
except:
page_statnum1 = page_row1.find_all("td")[1].contents[0]
except:
print("Invalid parent for this element")
page_statnum1 = "N/A"
stock_info.append(page_statnum1)
# <---------------- needs something here
browser.get(url2)
Возможно, вы подразумевали, что второй except:
находится на уровне отступа первого try:
:
for stat in key_stats_on_main:
page_stat1 = soup.find(text = stat)
try: # <--------------- this one here
page_row1 = page_stat1.find_parent("tr")
try:
page_statnum1 = page_row1.find_all("span")[1].contents[1]
except:
page_statnum1 = page_row1.find_all("td")[1].contents[0]
except:
print("Invalid parent for this element")
page_statnum1 = "N/A"
stock_info.append(page_statnum1)
browser.get(url2)
Попробуйте!
Кстати, вы должны уменьшить размер кода в вашем предложении try:
и перехватывать только те исключения, которые вы обрабатываете.В вашем случае AttributeError
(в случае сбоя .contents
) будет обнаружен первым except:
.Лучше:
try:
found = page_row1.find_all("span")
index = 1
except XError: # should be the one .find_all() can raise
found = page_row1.find_all("td")
index = 0
page_statnum1 = found[1].contents[index]
И что-то похожее для внешнего try
/ except
.
Таким образом, вы не скрываете другие исключения, которые никогда не собирались обрабатывать.Если ты сделаешь это сокрытие, тебе будет трудно понять, что идет не так, поэтому избегай этого.