[英]Confusion regarding str.format()
我正在构造一个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"'
这可以正常工作,并且上面的打印语句可以正确打印我想要的内容。 为什么会发生这种情况?
在Python2中,以0
开头的立即数是八进制形式。
>> 011 == 9
True
在Python3中,它略有不同,
八进制文字现在必须以“ 0o”或“ 0O”开头而不是“ 0”来指定;
这减少了犯错的机会。
您在格式函数中传递数字而不是字符串。 并且由于您的数字从零开始,因此Python2认为它是八进制的。
您可以在数字周围加上引号,然后将其传递给格式函数。
QUERY_PARAMS['q'] = r'test="{}"'.format('0012000017421')
这应该做的工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.