使用format()将default设置为NULL会返回意外的字符串

时间:2018-12-02 02:58:14

标签: python python-requests

在下面定义的用于检索最后24小时数据的API调用中,正常的请求网址为:

https://api.foobar.com/data

这就是为什么我将next_page参数默认设置为NULL的原因。

但是,有时API会在json的末尾返回一个唯一的URL(例如https://api.foobar.com/data?page%237hfaj39),这表明存在另一个页面,并且需要进行另一个get_data请求来检索剩余的页面

在这种情况下,{next_page}参数将设置为返回的唯一网址。

我的问题是添加了{next_page}参数后,默认的get_data网址以某种方式获得了4个不需要的字符-附加了%7B%7D使得请求看起来像

https://api.foobar.com/data%7B%7D,并且API当然不会响应。

在UTF-8编码%7B%7D中,有两个括号{}

为什么会发生这种情况?在格式化方面我在做什么错?使用None代替{}也不起作用。

代码:

def make_request(url, params={}, headers={}):
    r = requests.get(url, params=params, headers=headers)
    print r.url
    if(not r.status_code is 200):
        print "Error access API" + r.text
        exit()
    return r.json()

def get_data(access_token, next_page={}):
    end_time = int(round(time.time() * 1000))
    start_time = end_time - (seconds_in_day * 1000)
    headers = {'Authorization': 'Bearer ' + access_token, 'start_time': str(start_time), 'end_time': str(end_time)}
    url = 'https://api.foobar.com/data{next_page}'.format(next_page=next_page)
    return make_request(url, headers=headers)

注意:删除next_page参数后,API调用才起作用

1 个答案:

答案 0 :(得分:1)

使用next_page={},您将获得意外的格式化结果。如果您尝试以下操作:

>>> '{}'.format({})
'{}'

如您所见,您得到的是带有两个方括号的字符串,而不是所需的''。这是因为:

>>> str({})
'{}'

None也发生了类似的事情:

>>> '{}'.format(None)
'None'
>>> str(None)
'None'

要解决此问题,请尝试使用next_page={}而不是next_page='',因为.format()会这样做:

>>> '{}'.format('')
''