在f字符串中使用fraction.Fraction时,我希望能够将其格式化为float。然而,我得到了一个TypeError
from fractions import Fraction
f = Fraction(11/10)
f'{f} as float {f:.3f}'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported format string passed to Fraction.__format__似乎浮点格式规范可以/应该支持Fractions。
有趣的是,它们是针对Decimal的
from decimal import Decimal
f = Decimal('1.1')
f'{f} as float {f:.3f}'有没有什么原因这对Fraction不起作用
是的,我知道我可以做f'{f} as float {float(f):.3f}',但我想知道为什么需要这样做。
发布于 2019-05-18 04:02:11
如果您没有在类中实现__format__方法,那么您将自动获得默认的格式化程序,该格式化程序只应用str方法。考虑一下
class MyClass:
"""A simple example class"""
def __str__(self):
return 'hello world'如果我这样做了
x = MyClass()
y = f"{x}"然后,y的值将为"Hello World"。这是因为我得到了默认的格式化程序,它调用我的__str__。
我怀疑Fraction类就是这种情况,因为当您执行help(Fraction.__format__)时,您会得到
Help on method_descriptor:
__format__(self, format_spec, /)
Default object formatter.https://stackoverflow.com/questions/56192213
复制相似问题