gpt4 book ai didi

python str() 函数结果不同于 __str__() 函数的结果

转载 作者:太空狗 更新时间:2023-10-30 02:55:51 25 4
gpt4 key购买 nike

我正在更新一个爱好应用程序,它是在 Ubuntu 14.04 上用 Python 2.7 编写的,它以 json 格式存储铁路历史数据。到目前为止,我用它来处理英国数据。

当开始使用法国数据时,我遇到了一个令我困惑的问题。我有一个实现 __str__() 的类 CompaniesCache。在该实现中,所有内容都使用 str。假设我实例化了一个 CompaniesCache 并分配给一个变量 companies。当我在 IPython2 中输入命令 print companies 时,我得到一个错误:

UnicodeEncodeError: 'ascii' codec can't encode character u'\xe0' in position 184: ordinal not in range(128)".

好吧,这并不奇怪。测试。 str(companies) 按预期重现错误。但是,companies.__str__() 毫无问题地成功了,print company.__str__() 也是如此。这里有什么问题?

这里是 CompaniesCache 对象的 __str__ 方法的代码:

class CompaniesCache(object):                                                       
def __init__(self, railrefdatapath):
self.cache = restoreCompanies(railrefdatapath)

def __getitem__(self, compcode):
return self.cache[compcode.upper()]

def __str__(self):
s = ''
for k in sorted(self.cache.keys()):
s += '\n%s: %s' % (k, self[k].title)
return s

这是 CompaniesCache 对象的代码,它在其缓存字典中包含公司对象。 Company 对象未实现 __str__() 方法。

最佳答案

str 不只是调用 __str__。除其他外,它验证返回类型,如果 __str__ 不可用,它会回退到 __repr__,并且它会尝试转换 unicode 使用 ASCII 编解码器将值返回到 str

您的 __str__ 方法返回一个包含非 ASCII 字符的 unicode 实例。当 str 尝试将其转换为字节串时,它失败了,产生了您所看到的错误。

不要从 __str__ 返回一个 unicode 对象。您可以实现一个 __unicode__ 方法来定义 unicode(your_object) 的行为方式,并从 __str__ 返回一个适当编码的字节串。

关于python str() 函数结果不同于 __str__() 函数的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41335395/

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