[英]Getting no output to win console when raising exception containing unicode literal (u“\u0410”)
當引發Python異常打印以贏得控制台時,我遇到了一個模糊的問題。 當異常消息包含任何unicode文字時,它根本不打印或打印不正確。 控制台編碼是cp866
當python默認編碼是ascii時。
raise LookupError(u"symbol: \u0411")
獲取打印為:
LookupError
當我將默認編碼設置為utf-8時,我得到了
LookupError:符號:╨С
當我做
print u"symbol: \u0411"
在這兩種情況下,我得到:
符號:Б
為什么行為有這種差異? 我該怎么辦呢?
當打印異常並給出Unicode消息時,Python嘗試使用sys.getdefaultencoding()
返回的編碼對其進行編碼。 如果失敗,則會抑制編碼錯誤並獲得奇怪的輸出。
在打印情況下,Unicode字符串使用sys.stdout.encoding
編碼。 是的,如果excepthook使用sys.stderr.encoding
而不是sys.getdefaultencoding()
,那可能會更好。
請注意以下工作。
raise LookupError(u"symbol: \u0411".encode(your_encoding))
您還可以通過調用sys.setdefaultencoding(your_encoding)
來更改sitecustomize
或usercustomize
的默認編碼。 應配置您的系統,使默認編碼等於sys.stderr.encoding
(以及其他標准流的編碼)。
此外,Python 3中不再存在此問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.