请求requests.get遇ConnectionError 10054,求可重试的完整代码
解决requests.get连接错误与重试问题
没问题,我来帮你搞定这两个问题!
先解决那个语法错误
你提到的SyntaxError: 'return' outside function(应该是这个完整报错),大概率是缩进错误或者return语句没放在函数内部。举个错误的例子:
def my_function(): print("Hello") return True # 这里没和函数内代码对齐,就会触发语法错误
正确写法要保证return和函数内其他代码缩进一致:
def my_function(): print("Hello") return True
自动重试的requests.get代码
针对你遇到的ConnectionError 10054(远程主机强制关闭连接),我写了一套完整的重试逻辑,会一直尝试直到请求成功:
import requests import time def fetch_with_retry(url, delay=2): while True: try: # 发送GET请求,你可以按需添加headers、params等参数 response = requests.get(url) # 可选:如果需要捕获HTTP状态码错误(比如4xx/5xx),加上这行 response.raise_for_status() print("请求成功!") return response except requests.exceptions.ConnectionError as e: # 专门捕获你遇到的连接错误(包括10054) print(f"连接错误:{e},{delay}秒后重试...") time.sleep(delay) except requests.exceptions.RequestException as e: # 兜底捕获其他请求相关错误(超时、HTTP错误等) print(f"请求出错:{e},{delay}秒后重试...") time.sleep(delay) # 使用示例 target_url = "https://example.com" response = fetch_with_retry(target_url) # 后续可以处理响应,比如print(response.text)
代码说明:
- 用
while True实现无限循环,直到请求成功后通过return退出 - 单独捕获
ConnectionError处理10054这类连接问题,同时用RequestException兜底其他请求异常 - 添加
time.sleep(delay)避免频繁请求给服务器施压,你可以调整delay值设置重试间隔 - 可选的
response.raise_for_status()会在HTTP状态码异常时触发重试,按需开启即可
内容的提问来源于stack exchange,提问作者matrixebiz
相关产品推荐
相关产品推荐

