Как разрешить родительской функции обрабатывать исключение в Python - Discogs API - PullRequest
0 голосов
/ 02 мая 2020

Я пытаюсь сделать несколько звонков на API Discogs, и я сталкиваюсь с ограничением скорости. Я хочу обернуть мой объект Discog в блок try / Кроме того, чтобы перехватить этот предел, поспать и продолжить работу с программой. У меня проблема в том, что функция initiate_discog_object () не перехватывает ошибки при вызове, как я могу заставить ее перехватывать ошибки? Я могу обойтись, вставляя try / block вокруг кода каждый раз, когда он вызывается, но я знаю, что это не pythoni c.

Это не-pythoni c реализация

def initiate_discog_object():
    return discogs_client.Client('my app name 1.0',
                      consumer_key='myconsumerkey',
                      consumer_secret='myconsumersecret',
                      token='mytoken',
                      secret='mysecret')
while True:
    try:
        initiate_discog_object().release('13127671')
    except HTTPError:
        print('Making Requests Too Quickly! Sleeping for 5 seconds!')
        sleep(5)

Это реализация Pythoni c / Что я хочу сделать.

def initiate_discog_object():
    while True:
        try:
            return discogs_client.Client('my app name 1.0',
                      consumer_key='myconsumerkey',
                      consumer_secret='myconsumersecret',
                      token='mytoken',
                      secret='mysecret')
        except HTTPError:
            print('Sleeping for 5 seconds!')
            sleep(5)

Так что, когда такая функция является run:

while True:
    print(initiate_discog_object().release('13127671'))

Программа спит, а затем пытается снова. Это ошибка, которую я получаю:

Traceback (most recent call last):
  File "C:/Users/Administrator.DELL-26/projects/blah/blah/discography_crawler.py", line 182, in <module>
    print(initiate_discog_object().release('13127671'))
  File "C:\Python37\lib\site-packages\discogs_client\models.py", line 497, in __repr__
    return self.repr_str('<Release {0!r} {1!r}>'.format(self.id, self.title))
  File "C:\Python37\lib\site-packages\discogs_client\models.py", line 31, in __get__
    value = instance.fetch(self.name)
  File "C:\Python37\lib\site-packages\discogs_client\models.py", line 245, in fetch
    self.refresh()
  File "C:\Python37\lib\site-packages\discogs_client\models.py", line 211, in refresh
    data = self.client._get(self.data['resource_url'])
  File "C:\Python37\lib\site-packages\discogs_client\client.py", line 123, in _get
    return self._request('GET', url)
  File "C:\Python37\lib\site-packages\discogs_client\client.py", line 120, in _request
    raise HTTPError(body['message'], status_code)
discogs_client.exceptions.HTTPError: 429: You are making requests too quickly.

Я искал вокруг, возможно, я не знаю, как правильно сформулировать вопрос, но я не могу найти ответ, любая помощь приветствуется.

...