在 f 字符串中避免 None

Avoiding None in f-string

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

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

如果 prefixNone 那么这个字符串将呈现为 Arnold None Weber.

我试过 f'{first_name} {prefix or ''} {last_name}' 但这是一个语法错误。

当然是语法错误;你把琴弦弄断了。

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

I tried f'{first_name} {prefix or ''} {last_name}' but that's a syntax error.

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

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)))

并不是说这更短——但逻辑更清晰。