Получение двух ошибок, keyerror и typeerror после оставления скрипта на некоторое время - PullRequest
0 голосов
/ 25 апреля 2019

После выполнения этого бита кода в бесконечном цикле True, он случайно вылетает и выдает следующие две ошибки:

TypeError: string indices must be integers

Keyerror: l (this is the letter "L", FWIW)

Проблема здесь в том, что работает, а затем просто падает. Иногда происходит сбой после первой итерации цикла while True, в других случаях он может работать до 20 минут до сбоя.

Это бит кода. Он получает данные о ценах OHLC от Bitmex. То, что он делает, берет последние 30, 1-минутные свечи и затем находит самую низкую "низкую" цену из всех 30. Если вы попробуете это, импортировав bitmex, json и запросы, это не должно работать без проблем при каждой ручной попытке. Когда он работает по циклу, он случайно падает. Есть идеи?

def lowest_price():
    response = requests.get("https://www.bitmex.com/api/v1/trade/bucketed?binSize=1m&partial=false&symbol=XBTUSD&count=30&reverse=true").json()
    minimum = min([l['low'] for l in response])
    return(minimum)

1 Ответ

0 голосов
/ 25 апреля 2019

Причина в том, что иногда вы получаете результаты с сервера, который ваш скрипт не может проанализировать.

TypeError происходит, когда ваш результат JSON декодируется в list строк; скажем, ["Invalid input"]. Ясно, что "Invalid input"['low'] не имеет смысла, так как вы не можете индексировать строки с помощью строковых ключей.

С другой стороны, KeyError происходит, когда вы получаете объект JSON, представляющий list из dicts, * хотя бы один из которых не содержит ключа 'low'.

Чтобы решить эту проблему, вы можете обернуть свою логику синтаксического анализа в блок try-except, который ищет нужные данные и возвращает что-то вроде None, если они не могут быть найдены. Вы также можете проверить код результата вызова get.

...