Python字典迭代修改导致RuntimeError: dictionary changed size during iteration错误解决方案
这个错误是由于在循环遍历字典banshi1的同时,又对字典banshi进行修改导致的。在Python中,不允许在循环遍历字典的过程中修改字典的大小。
解决这个问题的方法是创建一个副本来遍历字典,然后在副本上进行修改。你已经使用了banshi1=banshi.copy()来创建了一个副本,但是在修改banshi的时候,你没有使用副本。
修改代码如下:
banshi = banshi()
banshi1 = banshi.copy()
hrefs = []
for k, v in banshi1.items():
for i, j in v.items():
lists = []
for z in j:
driver = webdriver.Chrome()
driver.get(z)
sleep(3)
try:
alert = driver.switch_to.alert
alert.accept()
except NoAlertPresentException:
pass
try:
driver.find_element(By.XPATH,
'/html/body/div/div[2]/div[2]/div[1]/div[2]/div/ul/li[5]').click()
ul=driver.find_element(By.XPATH,
'/html/body/div/div[2]/div[2]/div[1]/div[1]')
li_list=ul.find_elements(By.TAG_NAME, 'a')
for i in li_list:
lists.append(i.get_attribute('href'))
print(i.get_attribute('href'))
driver.quit()
v[i] = lists # 修改副本中的值
except:
pass
banshi[k][i] = v[i] # 将副本中修改后的值赋给原字典
print(banshi)
这样就可以避免在循环遍历字典的同时修改字典的问题。
原文地址: https://www.cveoy.top/t/topic/qshs 著作权归作者所有。请勿转载和采集!