簡體   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