关于str.format()的困惑

时间:2017-03-13 17:42:37

标签: python formatting

我正在构建一个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语句正确打印我想要的。为什么会这样?

2 个答案:

答案 0 :(得分:2)

在Python2中,以0开头的文字编号为八进制。

>> 011 == 9
True

在Python3中,它略有不同,

  现在必须使用前导" 0o"来指定

八进制文字。或" 0O"而不是" 0";

这减少了犯错误的可能性。

答案 1 :(得分:1)

您正在格式化函数中传递数字而不是字符串。由于你的数字从零开始,Python2认为它是一个八进制。

您可以在数字周围添加引号并以格式函数传递。

QUERY_PARAMS['q'] = r'test="{}"'.format('0012000017421')

这应该做的工作。