如果出现此特定错误,我该如何重试?

How can i just retry if if I get this specific error?

如果我的脚本运行时间足够长,我会收到此特定错误:

*KeyError: 'data' 在处理上述异常的过程中,又出现了一个异常: 追溯(最近一次通话): ...第 61 行,在

...程序中的第 49 行

zeit = get_nanopool_time_to_next_epoch()

...第 33 行, 在 get_nanopool_time_to_next_epochwebseite['data']

我需要获取此 [“数据”]。如果请求失败,我该如何实现,它应该一次又一次地尝试,直到它工作。 感谢您的帮助!

import requests
import time
import os

def get_nanopool_time_to_next_epoch():
    while True:

        url=f"https://api.nanopool.org/v1/eth/network/timetonextepoch"
        resp = requests.get(url)
        webseite = requests.get(url).json()
        while resp.status_code >= 300:
            try:
                webseite['data']
                print("--------------------------------------------")
                print("Http Fehler", resp.status_code)
                #print(resp.content)
            except:
                time.sleep(30)
                webseite['data']
                print("--------------------------------------------")
                print("Http Fehler", resp.status_code)
                #print(resp.content)
        #webseite = requests.get(url).json()
        while 'data' not in webseite:
            try:
                time.sleep(50)
                webseite['data']
            except:
                
                #continue
                while 'data' not in webseite:
                    time.sleep(30)
                    webseite['data']
                    if ["data"]==[]:
                        time.sleep(30)
                print("--------------------------------------------")
                print("'data' nicht im Dictionary")
            return webseite['data']
        else:
            return webseite['data']
#time.sleep(30)

def programm():
    while True:
        zeit = get_nanopool_time_to_next_epoch()
        puffer=int(420)

        while zeit > puffer:
            zeit = get_nanopool_time_to_next_epoch()
            puffer=int (420)
            print("Zeit zum DAG-Wechsel in Sekunden:",zeit)
            time.sleep(30) #Refresh Zeit
            while zeit < puffer:
                print("Neustart in",int(zeit)) # Zeit zur nächsten DAG Epoche in Sekunden
                os.startfile("C:/Users/Simon/Desktop/Minerrrestart1.bat")
                print("restart")
                time.sleep(10000)
                break
        break
while True:
    programm()
    break

您可以使用 tryexcept 语句以及 while True 循环来完成此操作。:

while True:
    try:
        zeit = get_nanopool_time_to_next_epoch()
    except KeyError:
        continue
    break

在这里,zeit = get_nanopool_time_to_next_epoch() 将继续 运行,直到它不会导致 KeyError

如果您想在再次尝试 运行 命令之前等待一段时间,也可以使用 time.sleep() 添加延迟。

完整函数为:

def programm():
    while True:
        while True:
            try:
                zeit = get_nanopool_time_to_next_epoch()
            except KeyError:
                continue
            break
        puffer=int(420)

        while zeit > puffer:
            while True:
                try:
                    zeit = get_nanopool_time_to_next_epoch()
                except KeyError:
                    continue
            break

            puffer=int (420)
            print("Zeit zum DAG-Wechsel in Sekunden:",zeit)
            time.sleep(30) #Refresh Zeit
            while zeit < puffer:
                print("Neustart in",int(zeit)) # Zeit zur nächsten DAG Epoche in Sekunden
                os.startfile("C:/Users/Simon/Desktop/Minerrrestart1.bat")
                print("restart")
                time.sleep(10000)
                break
        break

如果您特定于请求库,比如您想继续尝试直到它给您 200,以下方法可能会奏效。

  • 为您的代码设置最大重试次数
from requests.adapters import HTTPAdapter

conn = requests.Session()
conn.mount(URL, HTTPAdapter(max_retries=max_retries))

或者您可以将其实现为无限次尝试:

while (resp.status_code!=200):
    url=f"https://api.nanopool.org/v1/eth/network/timetonextepoch"
    resp = requests.get(url)
    webseite = requests.get(url).json()
    #blah blah

或者您可以只使用 urllib3 along with its retry 实用程序以获得更高的稳健性。