繁体   English   中英

关于str.format()的困惑

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM