Python 添加例外列表是否附加到 try/except 的末尾?

Does Python add exception list appends to the end of try/except?

我正在向一个网站发出 POST 请求,其中包含许多商店的商店名称、街道和城市,每个商店都在网页上各自的卡片中。我正在尝试使用 xpath 从站点记录该数据。有少量项目(例如商店名称)无法读取,生成 IndexError,我正在尝试使用 try-except.

来处理这些错误

在下面的代码中,只有在读取单个标题变量并将其附加到名称列表时才会出错。我的代码捕获了异常,但出于某种原因,这个 'X_NAME_ERROR_X' 元素被附加到列表的末尾 - 例如['place1'、'place 2'、'place 4'、'X_NAME_ERROR_X'],当我知道异常发生在 'place3'.

中时

为什么 python 会在列表末尾附加异常代码变量,即使认为异常应该在 for 循环结束之前引发?

rest_count = len(response.html.xpath('//*[@id="search-results-container"]//div[@class="mb-32 width--full"]'))

names = []
street_address = []
city_address = []
for item in range(rest_count):
    try:
        title = response.html.xpath('//*[@id="search-results-container"]//div[@class="mb-32 width--full"]/h4/text()')[item]
        names.append(title)
    except IndexError:
        title = 'X_NAME_ERROR_X'
        names.append(title)
    try:
        street = response.html.xpath('//*[@id="search-results-container"]//div[@class="mb-32 width--full"]/p[1]/text()')[item]
        street_address.append(street)
    except IndexError:
        street = 'X_STREET_ERROR_X'
        street_address.append(street)
    try:
        city = response.html.xpath('//*[@id="search-results-container"]//div[@class="mb-32 width--full"]/p[2]/text()')[item]
        city_address.append(city)
    except IndexError:
        city = 'X_CITY_ERROR_X'
        city_address.append(city)

您尝试索引的数据结构是 [thing1, thing2, thing4],而不是 [thing1, thing2, some_magic_thing_that_raises_an_IndexError, thing4]。索引 0、1 和 2 是有效的,但索引 3 超出范围,因此最后会出现 IndexError。您可能期望在 2 和 4 之间有一个额外的东西,但这不是 IndexError 发生的地方。