我正在构建一个URL并使用requests
库注入一些参数,
QUERY_PARAMS['q'] = r'test="{}"'.format(0012000017421)
这给出了预期的:
'test="1342185233"'
但是当我使用请求库来发出这样的请求时:
result = requests.get(urlparse.urljoin(URL_TEST, URL_SEARCH), params=QUERY_PARAMS)
在我的印刷声明中,我得到一个完全不同的数字:
print('Searching with params: ', QUERY_PARAMS, ' on URL: ', result.url)
>>>('Searching with params: ', {'q': 'test="1342185233"', 'pretty_print': True, 'dataset': 'pod_nutrition_us'}, ' on URL: ', u'https://example.com/api/records/1.0/search?q=test%3D%221342185233%22&pretty_print=True&dataset=pod_nutrition_us')
当我使用0012000017421时,这个1342185233号是怎么出现的?
但是,如果这样做:
QUERY_PARAMS['q'] = r'test="0012000017421"'
这是正常的,上面的print语句正确打印我想要的。为什么会这样?
答案 0 :(得分:2)
在Python2中,以0
开头的文字编号为八进制。
>> 011 == 9
True
在Python3中,它略有不同,
现在必须使用前导" 0o"来指定八进制文字。或" 0O"而不是" 0";
这减少了犯错误的可能性。
答案 1 :(得分:1)
您正在格式化函数中传递数字而不是字符串。由于你的数字从零开始,Python2认为它是一个八进制。
您可以在数字周围添加引号并以格式函数传递。
QUERY_PARAMS['q'] = r'test="{}"'.format('0012000017421')
这应该做的工作。