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

时间:2015-09-25 12:16:29

标签: python string string-formatting

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

'Error %s: %s' % (str(err), str(message))

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

是否有必要使用%s明确转换str()个参数,或者这与%s完全相同?

3 个答案:

答案 0 :(得分: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'

String Formatting Operations section

中也明确记录了这一点
  

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

答案 1 :(得分:2)

无需这样做。 %s是用于打印的字符串格式化语法。这可能有助于添加更多上下文:

What does %s mean in Python?

答案 2 :(得分:0)

这取决于您使用的确切规格。使用接近于C语言printf的语法的旧样式格式。例如,

  • %s显示一个字符串(在传递的参数上调用str())。
  • %r显示一个表示(在传递的参数上调用repr())。
  • %d需要一个数字。

您拥有documentation上的整个列表。