繁体   English   中英

发生错误时循环不会中断

[英]While Loop doesn't break when error is occurred

我希望我的while循环在出现错误时中断,但它不会中断/关闭程序......

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"
        r = requests.get(url)

        try:
            soup = BeautifulSoup(r.text, "html.parser")

            for item in soup.select("div.property-address"):

                house_counter += 1
                address_prospect = item.get_text(strip=True)
                print(f"{address_prospect} {house_counter}")

            counter += 12
        except Exception as e:
            print(e)
            break


check_listing_sell()

出于某种原因,即使在“无结果”页面上, soup.select("div.property-address")返回一个空的 web 元素(不是错误)。 因此,应该添加条件if len(soup.select("div.property-address")) == 0 此外,将r = requests.get(url)放在 try 块中是一个不错的建议。

    while True:

        url = f"https://www.remax-quebec.com/fr/courtiers-immobiliers/james.he/index.rmx?offset={counter}#listing"

        try:
            r = requests.get(url)
            soup = BeautifulSoup(r.text, "html.parser")
            
            if len(soup.select("div.property-address")) == 0:
                break

            for item in soup.select("div.property-address"):

                house_counter += 1
                address_prospect = item.get_text(strip=True)
                print(f"{address_prospect} {house_counter}")

            counter += 12
        except Exception as e:
            print(e)
            break

将调用移动到try内的requests.get()

KeyboardInterrupt不是Exception的子类型,因此您需要一个单独的except块。

#from bs4 import BeautifulSoup
import 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:
            print(url)
            r = requests.get(url)
            print(r.text[:30])
            # soup = BeautifulSoup(r.text, "html.parser")

            # for item in soup.select("div.property-address"):

            #     house_counter += 1
            #     address_prospect = item.get_text(strip=True)
            #     print(f"{address_prospect} {house_counter}")

            counter += 12
        except KeyboardInterrupt:
            print("Manual interrupt")
            break
        except Exception as e:
            print(f"Exception occurred for counter={counter}, stopping loop: {e}")
            break

check_listing_sell()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM