Python string.format() :将 nans 格式化为 'some text'?

Python string.format() : formatting nans as 'some text'?

我正在使用 string.format() 将一些数字格式化为字符串。 format() 是否可以选择显示特定文本(例如 'not available')而不是 nan?我找不到它。还是我必须手动进行更换?

为了澄清评论中提出的观点,一个标题相似但上下文不同的问题was asked here。我的问题是不同的,因为那个问题的作者想要得到 'nan' 作为输出,但是由于一个错误已经被修复而得到了其他东西。

相反,我想了解 format() 是否有一个 built-in 选项来用其他文本替换 'nan'。当然,我非常感谢我可以自己手动进行替换,但只是想知道这是否是 format() 的 built-in 选项。

我认为您无法使用 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 的表示形式在解释器中显示为 "Not available",那么您必须改写 __repr__

备用黑客

为什么不对格式化字符串调用 replace? (假设那里没有其他字符串部分显示 "nan")。

>>> a = float('nan')
>>> print('This number is ' + ('%0.2f' % a).replace('nan', 'not available'))
This number is not available