如果出现连接错误,我希望Python等待并重试。这是相关的代码,其中“link”是一些链接:
import requests
import urllib.request
import urllib.parse
from random import randint
try:
r=requests.get(link)
except ConnectionError or TimeoutError:
print("Will retry again in a little bit")
time.sleep(randint(2500,3000))
r=requests.get(link)
除了我仍然定期收到连接错误。我从来没有看到文本“将再次重试”,所以我知道代码不会重新尝试。我究竟做错了什么?我正在粘贴下面的部分错误代码,以防我误读错误。 TIA!
TimeoutError:[WinError 10060]连接尝试失败,因为连接方在一段时间后没有正确响应,或者由于连接主机无法响应而建立连接失败
在处理上述异常期间,发生了另一个异常:
requests.packages.urllib3.exceptions.ProtocolError :('Connection aborted。',TimeoutError(10060,'连接尝试失败,因为连接方在一段时间后没有正确响应,或者由于连接主机而建立连接失败没有回复',无,10060,无))在处理上述异常期间,发生了另一个异常:
requests_exceptions.ConnectionError :('Connection aborted。',TimeoutError(10060,'连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立的连接失败,因为连接的主机无法响应',无,10060,无))答案 0 :(得分:1)
对我来说,在请求中使用自定义用户代理可解决此问题。通过这种方法,您可以欺骗浏览器。
作品:
url = "https://www.nasdaq.com/market-activity/stocks/amd"
headers = {'User-Agent': 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.6) Gecko/20070802 SeaMonkey/1.1.4'}
response = requests.get(url, headers=headers)
不起作用:
url = "https://www.nasdaq.com/market-activity/stocks/amd"
response = requests.get(url)
答案 1 :(得分:0)
我认为你应该使用
except (ConnectionError, TimeoutError) as e:
print("Will retry again in a little bit")
time.sleep(randint(2500,3000))
r=requests.get(link)
答案 2 :(得分:0)
第二个请求不在try块内,因此不会捕获异常。此外,在try-except块中,您还没有发现可能发生的其他异常 您可以使用循环尝试连接两次,如果请求成功则中断。
for _ in range(2):
try:
r = requests.get(link)
break
except (ConnectionError, TimeoutError):
print("Will retry again in a little bit")
except Exception as e:
print(e)
time.sleep(randint(2500,3000))