Python中发生异常时While循环无法终止的问题求助
问题分析
你的代码存在两个核心问题导致循环无法按预期终止:
requests.get(url)语句位于try块外部,请求过程中出现的异常(如网络错误、HTTP状态码错误)无法被捕获,会直接抛出但不会触发循环终止逻辑;- 当页面没有找到
div.property-address元素时,soup.select()会返回空列表,此时for循环不会执行,但代码仍会执行counter +=12并进入下一轮循环,导致无限遍历无数据的页面。
修复后的代码
from bs4 import BeautifulSoup import requests # 原代码遗漏了requests库的导入 def check_listing_sell(): counter = 0 house_counter = 0 while True: url = f"https://www.remax-quebec.com/fr/courtiers-immobiliers/james.he/index.rmx?offset={counter}#listing" try: r = requests.get(url) r.raise_for_status() # 主动将HTTP状态码错误(如404、500)转化为异常 soup = BeautifulSoup(r.text, "html.parser") items = soup.select("div.property-address") # 没有找到房源元素时,直接终止循环 if not items: print("没有更多房源数据,终止循环") break for item in items: house_counter += 1 address_prospect = item.get_text(strip=True) print(f"{address_prospect} {house_counter}") counter += 12 except Exception as e: print(f"发生异常:{e}") break check_listing_sell()
关键修改点
- 将
requests.get(url)移入try块内,确保请求阶段的异常能被捕获并触发终止; - 添加
r.raise_for_status(),把404、500这类HTTP错误转化为异常,避免无效页面的持续请求; - 新增空列表判断逻辑,当页面无房源数据时主动终止循环,无需等待异常触发;
- 补充了原代码遗漏的
import requests语句。
内容的提问来源于stack exchange,提问作者tiberhockey
相关产品推荐
相关产品推荐

