2017-03-13 60 views
0

我構建一個URL,並使用requests庫注入一些參數,可以關於混亂str.format()

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語句打印正確我想要的東西。爲什麼會發生?

+1

'INT(「0012000017421」,8)== 1342185233#TRUE' –

回答

2

在Python2,文字數開始與0是八進制。

>> 011 == 9 
True 

在Python3,它是略有不同,

八進制文字現在必須與一家領先的 「0°」 或 「0O」 而不是 「0」 的規定;

從而減少犯錯誤的機會。

+0

我明白,所以我怎麼也數表示爲與地方前導零的十進制? –

+1

使用像一個字符串''0012000017421'' – Liteye

+0

我不能使用字符串,因爲這個靜態數量用於測試,並將與某個變量代替。 'str(變量)'似乎也有同樣的問題。 –

1

您格式功能通過串的數量來代替。由於你的數字從零開始,Python2認爲它是一個八進制數。

你可以在你的號碼添加引號,並傳遞它的格式功能。

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

這應該做的工作。