Python字符串格式化:如何将NaN格式化为“some text”?

7
我正在使用string.format()将一些数字格式化为字符串。 format()是否有选项可以显示特定文本(例如“不可用”)而不是nan?我找不到这个选项。还是说我必须手动进行替换?
为了澄清评论中提出的问题,一个类似标题但不同上下文的问题在这里被问到。我的问题不同,因为那个问题的作者想要得到“nan”作为输出,但由于已经修复的错误而得到其他结果。
我想知道的是,format()是否具有内置选项来替换“nan”为其他文本。当然,我完全明白我可以自己手动进行替换,但只是想知道这是否是format()的内置选项。

1
可能是在Python中格式化nan浮点数的重复问题。 - Delgan
我确实看了那个问题,但是它与我的情况不同。那个问题的作者想要得到“nan”作为输出,但由于一个已经修复的错误,他得到了其他结果。相反,我得到了“nan”,但想知道format()是否有选项可以显示除“nan”以外的内容。 - Pythonista anonymous
1个回答

8

我认为你无法使用format实现这一点,或者至少,我不知道如何实现。我所知道的唯一方法是子类化float,像这样:

from math import isnan

class myfloat(float):
    def __str__(self):
        if isnan(self):
            return 'Not available'
        else:
            return super(myfloat, self).__str__()

接下来,您可以获得:
>>> a = myfloat('nan')
>>> a
nan
>>> print(a)
Not available

如果你希望解释器中的变量 a 的表示形式为“不可用”,那么你需要覆盖 __repr__ 方法。 另一种方法 为什么不在格式化字符串上调用 replace 方法呢?(假设没有其他字符串部分读取了“nan”)。
>>> a = float('nan')
>>> print('This number is ' + ('%0.2f' % a).replace('nan', 'not available'))
This number is not available

实际上,我在我的脚本中调用了replacer()。我只是想知道format()是否有内置选项——这更多的是好奇而已。谢谢! - Pythonista anonymous

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接