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
我正在使用 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