避免在f字符串中无

时间:2018-07-11 22:46:51

标签: python python-3.x

如果我有一个f字符串,其中一个参数可能为None,有没有办法自动从字符串中忽略它?

f'{first_name} {prefix} {last_name}'

如果prefixNone,则此字符串将呈现为Arnold None Weber

我尝试了f'{first_name} {prefix or ''} {last_name}',但这是语法错误。

2 个答案:

答案 0 :(得分:6)

  

我尝试了f'{first_name} {prefix或}} {last_name}',但这是语法错误。

它是语法错误的唯一原因是您试图将单引号放在单引号内。所有常用的修复方法都可以使用:

f'{first_name} {prefix or ""} {last_name}'
f"{first_name} {prefix or ''} {last_name}"
f"""{first_name} {prefix or ''} {last_name}"""

但是,请注意,这并不能完全满足您的要求。您不会得到Arnold Weber,而不会得到Arnold Weber,因为两端的空格都不是有条件的。您可以执行以下操作:

f'{first_name} {prefix+" " if prefix else ""}{last_name}'
f'{first_name} {prefix or ""}{" " if prefix else ""}{last_name}'

…但是到那时,我认为您不再从f字符串中获得简洁性和可读性的好处。也许考虑一些不同的东西,例如:

' '.join(part for part in (first_name, prefix, last_name) if part)
' '.join(filter(None, (first_name, prefix, last_name)))

不是说这更短了( ),但是逻辑上更加清晰了。

答案 1 :(得分:1)

当然是语法错误;你打断了绳子。

year    rainfall(per 15 min)
2006    1
2006    1.2
2006    1.3
2006    0