Правильный способ отловить ошибки API krakenex

Мой первый опыт работы с API krakenex несколько разочаровывает, мой код часто дает сбой из-за ошибок, возвращаемых методами API. Понятно, что я должен создать надежный код, который может правильно отлавливать ошибки.

Следующие ошибки часто происходят:

>>> krapi.query_private('CancelOrder', {'txid':'OXGFZA-DTGGU-N3POM6'})
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "krakenex/api.py", line 122, in query_private
    return self._query(urlpath, req, conn, headers)
  File "krakenex/api.py", line 82, in _query
    ret = conn._request(url, req, headers)
  File "krakenex/connection.py", line 65, in _request
    response = self.conn.getresponse()
  File "/usr/lib64/python2.7/httplib.py", line 1121, in getresponse
    response.begin()
  File "/usr/lib64/python2.7/httplib.py", line 438, in begin
    version, status, reason = self._read_status()
  File "/usr/lib64/python2.7/httplib.py", line 394, in _read_status
    line = self.fp.readline(_MAXLINE + 1)
  File "/usr/lib64/python2.7/socket.py", line 480, in readline
    data = self._sock.recv(self._rbufsize)
  File "/usr/lib64/python2.7/ssl.py", line 766, in recv
    return self.read(buflen)
  File "/usr/lib64/python2.7/ssl.py", line 653, in read
    v = self._sslobj.read(len)
ssl.SSLError: ('The read operation timed out',)
>>> krapi.query_private('CancelOrder', {'txid':'OXGFZA-DTGGU-N3POM6'})
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "krakenex/api.py", line 122, in query_private
    return self._query(urlpath, req, conn, headers)
  File "krakenex/api.py", line 83, in _query
    return json.loads(ret)
  File "/usr/lib64/python2.7/json/__init__.py", line 339, in loads
    return _default_decoder.decode(s)
  File "/usr/lib64/python2.7/json/decoder.py", line 364, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib64/python2.7/json/decoder.py", line 382, in raw_decode
    raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded
>>> krapi.query_private('CancelOrder', {'txid':'OXGFZA-DTGGU-N3POM6'})
{u'result': {u'count': 1}, u'error': []}

Честно говоря, я не знаю, что я делаю, потому что это совершенно новая тема для меня. Вот код, который я придумал до сих пор:

import sys
import ssl
import time
import krakenex

krapi = krakenex.API()
krapi.load_key('krakenex.key')

while True:
    try:
        krapi.query_private('CancelOrder', {'txid':'OXGFZA-DTGGU-N3POM6'})
        break
    except ValueError:
        print "Oops! ValueError..."
        print sys.exc_info()[1]
    except ssl.SSLError:
        print "Oops! ssl.SSLError..."
        print sys.exc_info()[1]
    finally:
        sys.exc_clear()
        time.sleep(1)

Я хотел бы избежать катастрофического события, которое в этом случае означало бы, что заказ никогда не будет отменен. Намерение состоит в том, чтобы повторять запрос, пока он не будет успешно выполнен (я знаю, идентификатор заказа жестко запрограммирован, он будет заменен переменной позже...).

Это правильный способ обработки таких исключений?

А может, здесь чего-то не хватает?

Может быть, может быть предложено более питоническое решение?

0 ответов

Другие вопросы по тегам