Imgur API:字典值神奇地变成了 None?

Imgur API: Dictionary values magically turns into None?

我知道巫毒魔法可能不是这个原因 - 但看起来确实如此!

我有以下代码片段,使用了 imgur API。 imgur 对象是 imgur API 使用的客户端,它包含一个属性 credits,显示用户在网站上的访问信用数。

imgur = imgurpython.ImgurClient(client_id, client_secret)

通话中:

imgur.credits

Returns 学分正常,即:

{'ClientLimit': 12500, 'UserReset': 1503185179, 'UserLimit': 500, 'UserRemaining': 0, 'ClientRemaining': 12000}

然而,当我试图在后面的函数中调用字典时:

def check_credits(imgur):
    '''
        Receives a client - and if there is not much credits left,
        wait until the credit refills - i.e. pause the program
    '''
    credits = imgur.credits
    credits_remaining = credits['UserRemaining']
    reset_time = credits['UserReset']

    if credits_remaining < 10:
        print('not enough credits, remaining: %i' % credits_remaining)
        now = int(dt.utcnow().timestamp())
        wait_time = reset_time - now
        print('waiting for: %i' % wait_time)
        time.sleep(wait_time)

有时 字典中的值似乎变成了 None 而不是它们应该是的整数。在这种情况下,reset_timecredits_remaining 有时会变成 None。为了让我的代码 运行 我不得不在整个代码中添加 try-catch,这让人非常沮丧。顺便说一句,每当错误 ImgurClientRateLimitError,即 imgur.credits['UserRemaining'] == 0 时,都会调用此函数。我想知道是否有人知道为什么会这样。

查看客户端的源代码后,它似乎会根据每个请求自动更新。更新值是在调用 ImgurClient.make_request 后从响应 headers 中获得的。 header 值是从 dict.get 获得的,如果 headers 字典中不存在键,则可以 return None。参考代码在这里:https://github.com/Imgur/imgurpython/blob/master/imgurpython/client.py#L143

我不确定这些 header 是否仍用于 404 或 403 之类的错误,但我会从那里进一步调查。似乎由于这种行为,您需要缓存以前的值或在这些情况下手动调用 ImgurClient.get_credits 方法来获取实际值。无论您使用哪种修复方法都取决于您。