"Socket-timeout: timed out python requests":套接字超时:Python请求超时。

16 浏览
0 Comments

"Socket-timeout: timed out python requests":套接字超时:Python请求超时。

使用 requests Python 库,我发起一个 GET 请求,并处理超时异常(以及其他我在此处不显示的异常),如

import requests
timeout1=20
timeout2=40
try:
    #first attempt
    resp = requests.get(base_url+resource, params=payload, headers=headers,
    timeout=timeout1)
except requests.exceptions.Timeout:
    #timed out, retry once
    try:
       resp = requests.get(base_url+resource, params=payload, headers=headers,
       timeout=timeout2)
       return resp.json()
    except requests.exceptions.RequestException as e:
       #Still failed; return error code
       return -1

这通常都可以正常工作,然而有时我的程序会完全退出,提示错误信息 socket.timeout: timed out,而不是抛出 requests.exceptions.Timeout 并被捕获和处理。

为什么 requests 库会出现这种行为?我应该如何处理它?

admin 更改状态以发布 2023年5月22日
0
0 Comments

答案:

答案:

try:
    data = sock.recv(256)
except socket.timeout:
    data="NO RESPONSE"

它不会退出!

0
0 Comments

我认为这是requests使用urllib3的问题:

https://github.com/kennethreitz/requests/issues/1236

你需要捕获socket.timeout错误。(基于jb在Python requests模块的正确的try/except使用方式?中的评论)

0