旧式字符串格式化需要显式str()转换吗?

Mil*_*ams 3 python string string-formatting

我正在维护一个旧的Python代码库,其中包含一些非常奇怪的习惯用法.我遇到的一件事是使用百分比编码样式的字符串格式:

'Error %s: %s' % (str(err), str(message))
Run Code Online (Sandbox Code Playgroud)

忽略.format()现代字符串插值的存在,我的问题是:

是否有必要显式转换%s参数str()或者究竟是什么%s呢?

Mar*_*ers 6

不,不需要显式str()调用,%s格式化程序已经包含一个str()调用:

>>> class Foo(object):
...     def __str__(self):
...         return "I am a string for Foo"
... 
>>> '%s' % Foo()
'I am a string for Foo'
Run Code Online (Sandbox Code Playgroud)

这也在字符串格式化操作部分中明确记录:

's'
String(使用转换任何Python对象str()).