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_time
和 credits_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 方法来获取实际值。无论您使用哪种修复方法都取决于您。
我知道巫毒魔法可能不是这个原因 - 但看起来确实如此!
我有以下代码片段,使用了 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_time
和 credits_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 方法来获取实际值。无论您使用哪种修复方法都取决于您。