2013-09-24 4 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}". format (I, num_bits)이 가장 적합한 답변이었습니다. 나는 앞의 0을 포함하는 것을 잊었다. – Marmstrong

2

당신은 원형 보간 길을 잘못하고 있어요. format으로 전달하기 전에 %i을 해결해야합니다. 이것은 작동합니다 :

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

but 꽤 무섭다, 당신은 아마이로를 분할 할 :

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

파이썬에서 작업 순서가 있습니까 ?? – Marmstrong

+0

연산자 우선 순위를 의미합니까? 물론, 그것은 관련이 없습니다. 당신이 가진 방식대로,'%'는'format' 호출의 결과에 전달됩니다. –