我在維護一個老的Python代碼庫,它有一些非常奇怪的習慣用法。有一件事我已經遇到被串用百分比編碼樣式格式:舊式字符串格式化所需的顯式str()轉換?
'Error %s: %s' % (str(err), str(message))
忽略的.format()
現代字符串插值的存在,我的問題是:
是否有必要明確轉換%s
參數與str()
或正是%s
做什麼?
我在維護一個老的Python代碼庫,它有一些非常奇怪的習慣用法。有一件事我已經遇到被串用百分比編碼樣式格式:舊式字符串格式化所需的顯式str()轉換?
'Error %s: %s' % (str(err), str(message))
忽略的.format()
現代字符串插值的存在,我的問題是:
是否有必要明確轉換%s
參數與str()
或正是%s
做什麼?
沒有,有沒有必要明確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對象)。
謝謝。當我看時,我一直在努力在文檔中找到那部分內容。 – Milliams
沒有必要這樣做。 %s
是用於打印的字符串格式化語法。這可能有助於增加一些背景:
這取決於你使用的確切規格。舊式樣使用與C語言的printf相近的語法進行格式化。例如,
str()
)。repr()
)。您對documentation整個列表。
'%s'的措辭並不理想,我解決了它。但我解釋了python會調用'str'。然而,對於數字,python只會取一個整數,你可以很容易地檢查:'「%d」%「42」'會引發一個異常。 – spectras
爲什麼不嘗試'打印'%s'%1'並看看? – jonrsharpe
我做了,它工作。我甚至用一個虛擬類進行了檢查,看是否調用了__str__方法,但是我想檢查它是默認行爲還是後退鏈的一部分。 – Milliams
啊,我明白了;請注意,在問題中提及這種事情是有幫助的。 – jonrsharpe