gpt4 book ai didi

python - 在 python 3 中可以是数字和/或字符串的格式值

转载 作者:太空狗 更新时间:2023-10-29 20:18:00 24 4
gpt4 key购买 nike

是否有一种简洁的方式来格式化数字,有时也可以是字符串?

数字通常是一个 float ,但有时也表示为字符串“n/a”。

我想用固定的小数位数格式化 float ,但打印整个字符串以防它不是数字。

例如:

var=3.145623
print("This is {0:.2f}".format(var))

>>>This is 3.14

,但是

var = "n/a"
print("This is {0:.2f}".format(var))

>>> File "<stdin>", line 1, in <module>
>>> ValueError: Unknown format code 'f' for object of type 'str'

我对 ValueError 并不感到惊讶,但想知道是否有一种简洁的方法来解决它,理想情况下没有明确的 if 语句。

最佳答案

事实上,f 格式说明符仅适用于实际的float 值。您无法避免对 n/a 值进行特殊处理。

您可以分别和有条件地格式化 float ,然后将结果插入到更大的模板中:

var_formatted = format(var, '.2f') if var != 'n/a' else var
print("This is {0:4}".format(var_formatted))

如果你真的不喜欢if,你也可以使用异常处理:

try:
var_formatted = format(var, '.2f')
except ValueError:
var_formatted = 'n/a'
print("This is {0:4}".format(var_formatted))

另一种选择是使用 __format__ 方法将值包装在一个类中:

class OptionalFloat(object):
def __init__(self, value):
self.value = value
def __format__(self, fmt):
try:
return self.value.__format__(fmt)
except ValueError:
return self.value

print("This is {0:.2f}".format(OptionalFloat(var)))

这将检测类型的要求转移到另一个类方法中,使您的输出代码更清晰一些,并且没有所有那些讨厌的条件或异常处理程序:

>>> var = 3.145623
>>> print("This is {0:.2f}".format(OptionalFloat(var)))
This is 3.15
>>> var = 'n/a'
>>> print("This is {0:.2f}".format(OptionalFloat(var)))
This is n/a

关于python - 在 python 3 中可以是数字和/或字符串的格式值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43483386/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com