- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在更新一个爱好应用程序,它是在 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/
在 Python 3 中有没有一种方法可以以编程方式递归调用私有(private)成员变量唯一的 __str__ 函数?像这样的东西: class A: def __str__(self):
我正在用 Python 构建一个简单的类。我已经定义了我自己的 __str__ 方法,当我在类的一个实例上调用 print 时,它应该能很好地工作。当我创建该类的实例并对其调用 print 时,出现错
我一直在尝试创建一个理性类,并添加一个 __str__ dunder 方法返回 p(分子)除以 q(分母)。当我尝试打印对象 Rational_1 时,它只提供 init 方法的输出,并且不返回 __
当我尝试 __str__() 国外的方法它提供这个错误 __str__ returned non-string (type Product) 模型.py class Product(models.Mo
使用这样的嵌套模型: class Gov(models.Model): name = models.CharField(max_length=20) def __str__(self)
在 django __str__ 中有没有办法一次输出所有属性,而不是像我在这里做的那样一个一个输出?我计划拥有大约 100 个属性,因此将所有属性都放在 str 方法中似乎不正确。 class Ca
可以 __str__从字面上返回任何我的灵魂想要的东西? __str__ 上的文档状态: [...] the “informal” or nicely printable string represe
我在容器中打印用户定义的类实例时遇到了一些问题。简而言之,如果我的代码是: class A(): def __str__(self): return 'abc' class B
我是 Python 新手,但我一直遇到与此类似的问题 thread 我当前正在运行: Python 3.6.7 海湾合作委员会8.2.0 没有 IDE,只有普通的 *.py 文件 这是我的类(clas
您好,当我尝试打印我的对象时,我遇到了 __str__ 问题。解释器告诉我“TypeError:格式字符串的参数不足” 这是我正在尝试运行的代码! 'My Practice Class'
我正在尝试改进您在 codecademy python 类(class)中制作的“战舰”游戏,我决定我的第一步是实现类。 我预期的代码输出是五行 O O O O O。当我在 for 循环中只使用一个
这个问题在这里已经有了答案: functools.partial on class method (2 个答案) 关闭 5 年前。 我在尝试为一个程序编写 pretty-print 程序时遇到了这个
这是我的脚本: import math class Vector: def __init__(self, x=0.0, y=0.0): self.x = x s
我正在开发一个绘制线并找到中点的模块。出于测试目的,我想从相关类创建一些字符串输出。 class Line: def __init__(self, endpoints): self.sta
假设我有一个导入的模块,它工作正常但没有提供好的 __str__ 方法,我想添加一个。 在一些混合语言中: from foo import Foo Foo.prototype._str__ = fun
我了解到 __str__可以定义对象字符串的输出。 例子: class Person(object): def __init__(self, name): self.name
这个问题在这里已经有了答案: Why can't I replace the __str__ method of a Python object with another function? (2
在引发异常后,我试图覆盖 Python 中 Exception 子类的打印输出,但我没有运气让我的覆盖实际被调用。 def str_override(self): """ Overri
我想将 python 函数的字符串表示更改为函数名称。 例如某些功能 def blah(x): ... str(blah) 当前给出 所以我这样替换 __str__: blah.__str__=l
谁能告诉我 print sth 和 print str(sth) 之间的区别? 例如在 official documentation for sqlite3 的示例中,目前可以看到以下创建数据库的代码
我是一名优秀的程序员,十分优秀!