gpt4 book ai didi

python - 引发包含 unicode 文字 (u"\u0410") 的异常时没有输出以赢得控制台

转载 作者:太空宇宙 更新时间:2023-11-03 11:55:18 25 4
gpt4 key购买 nike

当打印引发的 Python 异常以赢得控制台时,我遇到了一个模糊的问题。当异常消息包含任何 unicode 文字时,它根本不会打印或打印不正确。控制台编码为cp866

当python默认编码为ascii时。

raise LookupError(u"symbol: \u0411")

打印为:

查找错误


当我将默认编码设置为 utf-8 时,我得到了

查找错误:符号:╨С


当我做的时候

print u"symbol: \u0411"

在这两种情况下我得到:

符号:B

为什么行为会有所不同?我应该怎么做才能正确地做事?

最佳答案

当要打印异常并给出 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 中不再存在。

关于python - 引发包含 unicode 文字 (u"\u0410") 的异常时没有输出以赢得控制台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12485115/

25 4 0