Python string.format() :将 nans 格式化为“一些文本”?

Pyt*_*ous 6 python format nan string-formatting

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

为了澄清评论中提出的观点,这里提出了一个标题相似但上下文不同的问题。我的问题是不同的,因为该问题的作者想要将 'nan' 作为输出,但由于已修复的错误而得到其他内容。

相反,我想了解 format() 是否具有将“nan”替换为其他文本的内置选项。当然,我非常感谢我可以自己手动进行替换,但只是想知道这是否是format().

Pra*_*een 6

我不认为你可以用 来实现这一点format,或者至少,我不知道如何实现。我知道它可以完成的唯一方法是子类float,如下所示:

from math import isnan

class myfloat(float):
    def __str__(self):
        if isnan(self):
            return 'Not available'
        else:
            return super(myfloat, self).__str__()
Run Code Online (Sandbox Code Playgroud)

之后,您可以获得:

>>> a = myfloat('nan')
>>> a
nan
>>> print(a)
Not available
Run Code Online (Sandbox Code Playgroud)

如果您希望 的表示a在解释器上显示为“不可用”,那么您必须__repr__改用覆盖。

替代黑客

为什么不直接调用replace格式化的字符串?(假设那里没有其他字符串部分读取“nan”)。

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