長話短說:__unicode __(個體經營)不會被調用登錄
# this works as expected:
logging.error(my_object.__unicode__())
# this doesn't:
logging.error(my_object)
同樣的結果與__str__(self)
。 爲什麼?
編輯:__str__
實際工作。
長話短說:__unicode __(個體經營)不會被調用登錄
# this works as expected:
logging.error(my_object.__unicode__())
# this doesn't:
logging.error(my_object)
同樣的結果與__str__(self)
。 爲什麼?
編輯:__str__
實際工作。
日誌記錄將會調用str()
(它使用__str__()
,當它沒有被定義時,它會回退到__repr__()
)。這是因爲日誌框架不是Unicode安全的(即,當您嘗試將Unicode寫入各種日誌記錄匯時,您可能會遇到錯誤)。
>>> class MyClass(object):
... def __str__(self):
... return "foobar"
...
>>> import logging
>>> logging.error(MyClass())
ERROR:root:foobar
按預期工作?!
原來,它實際上工作。 – yanchenko 2009-11-20 11:20:36
不正確。記錄將使用'str(msg)%args'格式化消息。在Python 2.x中,如果你想提供stringify-behavior,你應該總是實現'__str __()'和'__unicode__'。 – 2009-11-20 11:20:28