Python%i中的字符串格式

Python%i中的字符串格式,python,python-3.x,string-formatting,Python,Python 3.x,String Formatting,我必须将代码从Python2.x转换为Python3(主要是字符串格式) 我遇到了这样的事情: Logger.info("random String %d and %i".format(value1, value2)) 现在,我知道%d可以替换为{:d},但找不到与%I(签名)等价的 使用{:i}会产生以下错误: ValueError:Python中类型为“int”的对象的未知格式代码“i”在%d和%i之间没有区别,因此您可以用相同的方式翻译它们%i仅为与其他语言的printf函数兼容而存在。

我必须将代码从Python2.x转换为Python3(主要是字符串格式) 我遇到了这样的事情:

Logger.info("random String %d and %i".format(value1, value2))
现在,我知道%d可以替换为{:d},但找不到与%I(签名)等价的 使用{:i}会产生以下错误:


ValueError:Python中类型为“int”的对象的未知格式代码“i”

%d
%i
之间没有区别,因此您可以用相同的方式翻译它们
%i
仅为与其他语言的printf函数兼容而存在。

简短回答:Python3 str.format()规范已放弃对“i”(%i或{:i})的支持。它只使用“d”(%d或{:d})来指定整数。因此,您可以简单地对所有整数使用{:d}

答案很长:对于输出,即printf或日志记录,在Python和C中,%i和%d实际上是相同的东西。这两者有区别,但仅当您使用它们来解析输入时,如scanf()。对于scanf,%d和%i实际上都是有符号整数,但%i将输入解释为十六进制数(如果前面有0x),将输入解释为八进制数(如果前面有0),否则将输入解释为十进制数。因此,对于正常使用,最好使用%d,除非您想将输入指定为十六进制或八进制

有关更多详细信息,请查看此处的格式规范:

%i只是%d的一个替代品,如果您想从更高的层次(从python的角度)来看它的话

下面是python.org对%i:有符号整数十进制的看法

和%d:有符号整数十进制

%d代表十进制,%i代表整数

但两者都是一样的,你可以两者兼用

所以你可以用同样的方法翻译它们

可能有答案。另请参见:–您最好不要自己进行格式化。而且
%d”。格式化(值)
甚至不能正常工作。它应该是
“%d”%value“
”{:d}.format(value)”
(或者干脆是
“{}.format(value)
)。可能是