我和同事刚刚遇到了一个使用f-string的有趣问题。这是一个最小化的例子:
>>> f"{ 42:x}"
'2a'
在十六进制类型后添加空格会导致
ValueError
:>>> f"{ 42:x }"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: Invalid format specifier
我理解 PEP 498 中的段落 Leading and trailing whitespace in expressions is ignored 的意思是实际上应该忽略空格。
为什么空格会导致错误,这背后的原因是什么?
{ <expression> <可选 !s、!r 或 !a> <可选 : 格式说明符> }
,遵循 PEP 498。42
是表达式,x
是格式说明符,而:
则是分隔符;它们并不是表达式的一部分。 - Amadan