我必须将代码从Python2.x转换为Python3(主要是字符串格式) 我遇到了这样的事情:
Logger.info("random String %d and %i".format(value1, value2))
现在,我知道%d可以替换为{:d},但是找不到等效的%i(签名) 使用{:i}会出现以下错误:
ValueError:类型为'int'的对象的未知格式代码'i'
答案 0 :(得分:2)
在Python中,%d
和%i
之间没有区别,因此您可以以相同的方式进行翻译。 %i
仅用于与其他语言的printf
函数兼容。
答案 1 :(得分:2)
简短的答案:Python3 str.format()规范已放弃对“ i”(%i或{:i})的支持。它仅使用“ d”(%d或{:d})来指定整数。因此,您可以简单地将{:d}用于所有整数。
长答案:对于输出,即对于printf或日志记录,%i和%d实际上是同一件事,无论是在Python还是在C语言中。都有区别,但仅当您使用它们来解析输入时才是如此,例如scanf ()。对于scanf,%d和%i实际上均表示带符号整数,但如果%i以0x开头则将输入解释为十六进制数,如果以0开头则将其解释为八进制,否则将输入解释为十进制。因此,对于正常使用,除非您想将输入指定为十六进制或八进制,否则最好使用%d。
有关更多详细信息,请在此处查看格式规范: https://docs.python.org/2/library/string.html#formatspec
答案 2 :(得分:0)
%i只是%d的一种替代方式,如果您想从python的角度高层次地看待它。
这是python.org关于%i所说的:带符号的整数十进制。
和%d:带符号的整数十进制。
%d代表小数,%i代表整数。
但两者相同,您可以同时使用。
,因此您可以用相同的方式翻译它们。