簡體   English   中英

在引發包含unicode文字的異常(u“\\ u0410”)時,沒有輸出來贏取控制台

[英]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)來更改sitecustomizeusercustomize的默認編碼。 應配置您的系統,使默認編碼等於sys.stderr.encoding (以及其他標准流的編碼)。

此外,Python 3中不再存在此問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM