#python #api #python-requests
Вопрос:
мой код Python выдает ошибку после короткого периода от 5 до 7 запросов или так называемого «Файла». c:/Users/xxx/Desktop/Webscraper.py», строка 15, в программе zeit=(веб-сайт[«данные»]).
Ошибка ключа: «данные»
Почему он выдает эту ошибку ? Ключ всегда должен быть там.
import requests
import time
import os
def programm():
while True:
url=f"https://api.nanopool.org/v1/eth/network/timetonextepoch"
webseite = requests.get(url).json()
zeit=(webseite['data'])
puffer=int(420)
while zeit > puffer:
url=f"https://api.nanopool.org/v1/eth/network/timetonextepoch"
webseite = requests.get(url).json()
zeit=(webseite["data"])
puffer=int (420)
print("Zeit zum DAG-Wechsel in Sekunden:",zeit)
time.sleep(60) #Refresh Zeit
while zeit < puffer:
print("Neustart in",int(zeit)) # Zeit zur nächsten DAG Epoche in Sekunden
os.startfile("C:/Users/xxxx/Desktop/restart1.bat")
print("restart")
time.sleep(5000)
break
break
while True:
programm()
break
Комментарии:
1. «Ключ всегда должен быть там» — ну, очевидно, это не так. Вы можете
print(webseite)
перед доступом кdata
полю просмотреть содержимое2. Значение, полученное из HTTP GET, равно
{"status":true,"data":319847.5982666667}
3. Как я могу обработать пропущенный запрос? Скрипт всегда должен выполнять этот запрос даже без ответа
4. Каков ваш план на случай ошибок? Вы должны
resp = requests.get(url)
и должны проверитьresp.status_code
, прежде чем получать json. Затем решите, что делать с различными типами ошибок. Вам следуетif 'data' in webseite
, прежде чем пытаться использовать его, решить, что вы хотите делать в этом случае.5. если запрос не выполняется, он должен просто повторять его снова и снова, пока я не получу запрос. Как я могу это реализовать?
Ответ №1:
Веб-сайты могут периодически выходить из строя по многим причинам. Возможно, вы делаете слишком много запросов, или сервер перегружен, или он не работает для обслуживания. Ваш код должен проверять коды ошибок, которые помогут выяснить, что идет не так.
Поскольку вы хотите продолжать попытки, вы можете просто добавить это в свой код. Я выделил сбор данных в отдельную функцию, которая возвращается только тогда, когда получает хорошие данные. Это уменьшает количество повторений в вашем коде.
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)
if resp.status_code >= 300:
print("--------------------------------------------")
print("Http error", resp.status_code)
print(resp.content)
webseite = requests.get(url).json()
if 'data' not in webseite:
print("--------------------------------------------")
print("'data' not in result")
print(resp.content)
else:
return webseite['data']
time.sleep(1)
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(60) #Refresh Zeit
while zeit < puffer:
print("Neustart in",int(zeit)) # Zeit zur nächsten DAG Epoche in Sekunden
os.startfile("C:/Users/xxxx/Desktop/restart1.bat")
print("restart")
time.sleep(5000)
break
break
while True:
programm()
break
Комментарии:
1. Вот и все. Большое вам спасибо. Мне нужно увеличить обработку исключений. Ты мне так сильно помогаешь.
2. Как я могу реализовать это, если запрос не выполняется, он просто пытается снова и снова. Я не хочу прерывать код сообщением об ошибке.