gpt4 book ai didi

python - __repr__() 函数的最佳输出类型和编码实践?

转载 作者:IT老高 更新时间:2023-10-28 21:39:59 24 4
gpt4 key购买 nike

最近,__repr__() 遇到了很多麻烦。 , format() , 和编码。 应该输出__repr__()是编码还是 unicode 字符串? __repr__() 的结果是否存在最佳编码?在 Python 中?我要输出的确实有非 ASCII 字符。

我使用 Python 2.x,并且想编写可以轻松适应 Python 3 的代码。程序因此使用

# -*- coding: utf-8 -*-
from __future__ import unicode_literals, print_function # The 'Hello' literal represents a Unicode object

以下是一些一直困扰我的其他问题,我正在寻找解决这些问题的解决方案:

  1. 应该可以打印到 UTF-8 终端(我将 sys.stdout.encoding 设置为 UTF-8,但最好是其他情况也可以)。
  2. 将输出通过管道传输到文件(以 UTF-8 编码)应该可以工作(在这种情况下,sys.stdout.encodingNone)。
  3. 我的许多代码 __repr__()功能目前有很多return ….encode('utf-8') ,而且很重。有什么坚固而轻便的东西吗?
  4. 在某些情况下,我什至拥有像 return ('<{}>'.format(repr(x).decode('utf-8'))).encode('utf-8') 这样的丑陋野兽,即对象的表示被解码,放入格式化字符串,然后重新编码。我想避免这种复杂的转换。

为了写出简单的 __repr__(),你建议做什么?对这些编码问题表现良好的函数?

最佳答案

在 Python2 中,__repr__(和 __str__)必须返回一个字符串对象,而不是Unicode 对象。在 Python3 中,情况正好相反,__repr____str__必须返回 unicode 对象,而不是字节(née 字符串)对象:

class Foo(object):
def __repr__(self):
return u'\N{WHITE SMILING FACE}'

class Bar(object):
def __repr__(self):
return u'\N{WHITE SMILING FACE}'.encode('utf8')

repr(Bar())
# ☺
repr(Foo())
# UnicodeEncodeError: 'ascii' codec can't encode character u'\u263a' in position 0: ordinal not in range(128)

在 Python2 中,您真的别无选择。您必须为__repr__ 的返回值。

顺便问一下,你读过PrintFails wiki吗? ?它可能不会直接回答你的其他问题,但我确实发现它有助于阐明为什么发生错误。


当使用 from __future__ import unicode_literals

'<{}>'.format(repr(x).decode('utf-8'))).encode('utf-8')

可以更简单的写成

str('<{}>').format(repr(x))

假设 str 在您的系统上编码为 utf-8

如果没有from __future__ import unicode_literals,表达式可以写成:

'<{}>'.format(repr(x))

关于python - __repr__() 函数的最佳输出类型和编码实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3627793/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com