格式字符串中的条件字符串 (f"{...}")

问题描述 投票:0回答:3

如您所知,Python 3.6 有一个称为“格式化字符串文字”的功能。 str(obj['my_str_index']) 可以是

None
或字符串值。我已经尝试过下面的一种,但如果它是
'null'
,它不会产生
None
文本。
foo = "soner test " \
f"{str(obj['my_str_index']) if str(obj['my_str_index']) is not None else 'null'}

	
python python-3.x string format
3个回答
5
投票
str(None)

不是

None
,而是
"None"
。因此,没有那种无用且有害的字符串化:
foo = "soner test " \
f"{str(obj['my_str_index']) if obj['my_str_index'] is not None else 'null'}"

编辑:一种更清晰的方式(请注意,f 字符串中的插值会自动字符串化,因此我们根本不需要 
str

):

index = obj['my_str_index']
if index is None:
    index = "none"
foo = f"soner test {index}"

编辑:另一种方式,与海象(仅限 3.8+):

foo = f"soner test {'null' if (index := obj['my_str_index']) is None else index}"



4
投票

foo = f"soner test {obj['my_str_index'] or 'null'}"

您不必担心 
str(...)

,因为插值机制会隐式调用对象

__str__
方法(如果它没有
__format__
)。

此方法的唯一警告

是,如果 foo 是错误值(

null
obj['my_str_index']
和任何空序列)中的任何
,则 
None 将包含 0

多行+{}内的表达式

0
投票
foo = ( f"soner test " f"{obj['my_str_index'] or 'null'}" )


最新问题
© www.soinside.com 2019 - 2025. All rights reserved.