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

如何在Python中跳过'Connection aborted.'与OSError(0, 'Error')错误?

解决方法

你的代码逻辑上应该能捕获requests.exceptions.ConnectionError,但可能因为缩进、异常引用或者执行流程的问题,导致没触发预期的sleep重试逻辑。下面是修正后的可靠实现:

import requests
import time

def get_with_retry(my_url):
    max_tries = 3  # 可根据需求调整重试次数
    for try_num in range(max_tries):
        try:
            # 第一次请求用20秒超时,重试用30秒
            timeout = 30 if try_num > 0 else 20
            resp = requests.get(my_url, timeout=timeout)
            # 可选:如果要处理HTTP状态码错误(比如404、500),加上这行
            resp.raise_for_status()
            return resp
        except requests.exceptions.ConnectionError:
            if try_num == max_tries - 1:
                # 最后一次重试失败,抛出异常或者返回None,按需选择
                raise
            time.sleep(10)
        except Exception:
            if try_num == max_tries - 1:
                raise
            time.sleep(10)

# 使用示例
# result = get_with_retry("你的目标URL")

核心优化点:

  • 用循环实现重试,避免重复写请求代码,逻辑更清晰
  • 动态调整超时时间,重试时给更长的超时窗口
  • 限制最大重试次数,防止无限阻塞
  • 明确区分ConnectionError和其他异常的处理逻辑

排查原代码失效的可能原因:

  • 缩进错误:Python对缩进严格,检查except块是否和try保持同一层级的缩进
  • 异常引用错误:确认已经导入requests模块,requests.exceptions.ConnectionError拼写完全正确
  • 异常类型不匹配:可以临时用except Exception as e捕获所有异常,打印type(e)确认实际抛出的异常类型,再针对性调整捕获逻辑

比如临时调试代码:

try:
    req = requests.get(my_url, timeout=20)
except Exception as e:
    print(f"实际异常类型: {type(e)}")
    print(f"异常详情: {str(e)}")
    time.sleep(10)
    req = requests.get(my_url, timeout=30)

这样就能确定是不是捕获的异常类型和实际抛出的不匹配,再调整代码即可。

内容的提问来源于stack exchange,提问作者KJ H

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 04:42:56