Python 使用format()将默认值设置为NULL将返回意外的字符串
在我下面定义的检索最近24小时数据的API调用中,正常的请求url是: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个不需
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
形式的查询参数?我已经包括了这一点