2015-09-25 83 views
3

我在維護一個老的Python代碼庫,它有一些非常奇怪的習慣用法。有一件事我已經遇到被串用百分比編碼樣式格式:舊式字符串格式化所需的顯式str()轉換?

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

忽略的.format()現代字符串插值的存在,我的問題是:

是否有必要明確轉換%s參數與str()或正是%s做什麼?

+1

爲什麼不嘗試'打印'%s'%1'並看看? – jonrsharpe

+1

我做了,它工作。我甚至用一個虛擬類進行了檢查,看是否調用了__str__方法,但是我想檢查它是默認行爲還是後退鏈的一部分。 – Milliams

+0

啊,我明白了;請注意,在問題中提及這種事情是有幫助的。 – jonrsharpe

回答

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'
字符串(使用str()轉換任何Python對象)。

+0

謝謝。當我看時,我一直在努力在文檔中找到那部分內容。 – Milliams

0

這取決於你使用的確切規格。舊式樣使用與C語言的printf相近的語法進行格式化。例如,

  • %s顯示一個字符串(在傳遞的參數上調用str())。
  • %r顯示一個表示形式(對傳遞的參數調用repr())。
  • %d取一個數字。

您對documentation整個列表。

+0

'%s'的措辭並不理想,我解決了它。但我解釋了python會調用'str'。然而,對於數字,python只會取一個整數,你可以很容易地檢查:'「%d」%「42」'會引發一個異常。 – spectras