You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多段代码触发同一TimeoutException时,如何合理使用try-catch?

解决TimeoutException定位难题的两种方案

方案一:给每段操作单独加try-except

这是最直接的方式,能精准区分是Cookie按钮操作失败,还是商品标题查找超时,调试起来一目了然:

# 处理Cookie弹窗
try:
    reject_cookies_btn = self.wait.until(lambda driver: driver.find_element(By.CSS_SELECTOR, "[data-type='no']"))
    self.wait.until(EC.element_to_be_clickable(reject_cookies_btn))
    reject_cookies_btn.click()
except TimeoutException:
    print("关闭Cookie页脚失败:超时未找到按钮或按钮不可点击")

# 处理商品标题
try:
    product_title = self.wait.until(lambda driver: driver.find_element(By.CSS_SELECTOR, "[class='title-name a-fonts--26 a-colors--black-t js-detail-title']"))
    product_description["title"] = product_title.text
except TimeoutException:
    print("获取商品标题失败:超时未找到标题元素")

方案二:自定义等待的错误提示(不用拆分try-except)

利用WebDriverWait的message参数,给每个等待步骤添加专属错误信息,这样即使在同一个try块里,抛出的异常也能明确指出问题环节:

from selenium.common.exceptions import TimeoutException

try:
    # 关闭Cookie页脚,自定义超时提示
    reject_cookies_btn = self.wait.until(
        lambda driver: driver.find_element(By.CSS_SELECTOR, "[data-type='no']"),
        message="未找到Cookie拒绝按钮"
    )
    self.wait.until(
        EC.element_to_be_clickable(reject_cookies_btn),
        message="Cookie拒绝按钮无法点击"
    )
    reject_cookies_btn.click()

    # 查找商品标题,自定义超时提示
    product_title = self.wait.until(
        lambda driver: driver.find_element(By.CSS_SELECTOR, "[class='title-name a-fonts--26 a-colors--black-t js-detail-title']"),
        message="未找到商品标题元素"
    )
    product_description["title"] = product_title.text

except TimeoutException as e:
    print(f"操作出错:{e}")

如果需要针对不同失败场景做不同处理(比如Cookie没找到可以跳过,标题没找到要终止流程),选方案一;如果只是需要快速定位问题,不想拆分代码块,方案二更合适。

内容的提问来源于stack exchange,提问作者Tech Visionary

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 20:39:59