我正在測試解釋器上的一些代碼,我注意到一些sqlite3.Row
類的意外行爲。如何打印一個對象導致不同的輸出比str()和repr()?
我的理解是print obj
總是會得到相同的結果print str(obj)
,並鍵入obj
到解釋會得到相同的結果print repr(obj)
,但是這不是sqlite3.Row
情況:
>>> print row # the row object prints like a tuple
(u'string',)
>>> print str(row) # why wouldn't this match the output from above?
<sqlite3.Row object at 0xa19a450>
>>> row # usually this would be the repr for an object
(u'string',)
>>> print repr(row) # but repr(row) is something different as well!
<sqlite3.Row object at 0xa19a450>
我想sqlite3.Row
必須是tuple
的子類,但我仍然不確切瞭解可能導致此行爲的幕後操作。任何人都可以解釋嗎?
這是在Python 2.5.1上測試的,不確定其他Python版本的行爲是否相同。
不確定這是否重要,但我的Connection
的row_factory
屬性設置爲sqlite3.Row
。
發佈之前,你看過http://stackoverflow.com/questions/1436703/difference-between-str-and-repr-in-python嗎? – ktdrv
@kaloyan - 我找不到任何回答我的問題的東西,如果你能指點我的話。 –
有趣的行爲。 'sqlite3.Row'似乎不是子類的元組,所以我的猜測是print語句的特例列表和/或基於除繼承之外的其他標準的元組,但是我在文檔中找不到任何可以承認的東西,更不用說解釋了。 – millimoose