使字符串格式忽略'无'

时间:2015-10-21 23:52:47

标签: python

在python中有没有办法,当你做

foo = "foo"
bar = None
"{} {}".format(foo, bar)

它不打印无值作为bar的值吗?

即。它应该导致"foo "而不是"foo None"

3 个答案:

答案 0 :(得分:7)

如果要为变量分配None,则必须设置某种条件来控制所需的输出。这是一个简单的例子:

"{} {}".format(foo, "" if bar is None else bar)

另一种看待上述行为方式相同的方式,就是这样写:

"{} {}".format(foo, bar if bar is not None else "")

答案 1 :(得分:1)

def none_to_empty(s):
    return "" if s is None else s

def format_without_nones(format_string, *args):
    return format_string.format(*map(none_to_empty, args))

format_without_nones("{} {}", foo, bar)

如果您不了解format_without_nones的工作原理,请查看varargs和地图功能。它只相当于说

"{} {}".format(none_to_empty(foo), none_to_empty(bar))

这看起来并不漂亮,因为你可能需要花费很多时间重复none_to_empty。但是none_to_empty也可以直接使用,如果您只想将其应用于某些参数,但让None出现在其他参数中,例如:

"{} {}".format(foo, none_to_empty(bar))

仍然比每个"" if bar is None else bar bar更好。

答案 2 :(得分:-6)

我认为没有办法自动完成,你可以这样做:

"{} {}".format(foo, bar or "")