Python 使用format()将默认值设置为NULL将返回意外的字符串

Python 使用format()将默认值设置为NULL将返回意外的字符串,python,python-requests,Python,Python Requests,在我下面定义的检索最近24小时数据的API调用中,正常的请求url是: https://api.foobar.com/data 这就是我将next_page参数default设置为NULL的原因 但是,有时API会在json的末尾返回一个唯一的URL(例如),这表示存在另一个页面,需要发出另一个get_data请求来检索其余页面 在这种情况下,{next_page}参数将设置为返回的唯一url 我的问题是在添加了{next_page}参数后,默认的get_dataurl以某种方式获得了4个不需

在我下面定义的检索最近24小时数据的API调用中,正常的请求url是:

https://api.foobar.com/data
这就是我将
next_page
参数default设置为NULL的原因

但是,有时API会在json的末尾返回一个唯一的URL(例如),这表示存在另一个页面,需要发出另一个
get_data
请求来检索其余页面

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

我的问题是在添加了
{next_page}
参数后,默认的
get_data
url以某种方式获得了4个不需要的字符-
%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={}
删除
next_page
参数时,API调用会起作用,您将获得意外的格式化结果。如果您尝试以下操作:

>>> '{}'.format({})
'{}'
如您所见,您得到的不是所需的
'
,而是一个带两个括号的字符串。这是因为:

>>> str({})
'{}'
None
也会发生类似的情况:

>>> '{}'.format(None)
'None'
>>> str(None)
'None'
要解决此问题,请尝试使用
next\u page={}
,而不是
next\u page=''
,因为
.format()
将执行以下操作:

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

什么是
make_request
,它是否接受
params=dict
形式的查询参数?我已经包括了这一点