2013-09-24 23 views
1

我想從一個變量中指定一個標準的二進制格式長度,但由於某種原因,它永遠不會工作。我在做格式錯誤或變量包含?python在一個字符串中的變量

comp.write("{0:%ib}".format(I) % num_bits) 

ValueError: Invalid conversion specification

回答

3

首先,這是錯誤的順序:

("{0:%ib}" % num_bits).format(I) 

其次,是不是這樣做的方式!混合格式操作符的類型意味着你不知道它可以一起完成。你想:

"{:{}b}".format(I, num_bits) 

,如果你真的想這樣做的兩個步驟:

"{{:{}b}}".format(num_bits).format(I) 

{{}}被轉義,所以被轉換爲單一的大括號,第一.format後。

+1

爲嵌套格式+1:'「{:0 {} b}」.format(I,num_bits)'。 – jfs

+0

「{:0 {} b}」。格式(I,num_bits)是最好的答案。我忘了也包括前導零。 – Marmstrong

2

你圓做插錯了。在傳遞給format之前,您需要先解析%i。這會工作:

comp.write(("{0:%ib}" % num_bits).format(I)) 

而且是相當可怕的,你可能想把它分成兩個:

fmt = "{0:%ib}" % num_bits 
comp.write(fmt.format(I)) 
+0

是否有在Python中的操作順序? – Marmstrong

+0

你的意思是運營商優先權?當然,但這不相關。按照你的方式,'%'操作'format'調用的結果,而不是傳遞給它。 –

相關問題