我为什么在使用f-string时会出现“无效语法”?

77

我无法在Python 3中使用f-strings。 我在REPL上尝试了以下内容:

In [1]: state = "Washington"

In [2]: state
Out[2]: 'Washington'

In [3]: my_message = f"I live in {state}"
File "<ipython-input-3-d004dd9e0255>", line 1
my_message = f"I live in {state}"
                                ^
SyntaxError: invalid syntax

我认为我的机器默认使用的是 Python 2,但是快速检查后发现:

Python 3.5.2 (default, Nov 17 2016, 17:05:23) 
Type "copyright", "credits" or "license" for more information.

IPython 5.2.2 -- An enhanced Interactive Python.

有什么问题,我该怎么解决?


3
其他人使用的是哪个版本的Python?你似乎已经回答了自己的问题。https://docs.python.org/3/whatsnew/3.6.html#pep-498-formatted-string-literals - Josh Lee
@yeputons,请避免在评论中回答问题。请添加一个答案。 - Adrian Sanguineti
这是一个非常接近的决定,但我认为另一个问题的答案总体上略微更好,因此我将其作为规范答案。 - Karl Knechtel
3个回答

96
根据评论区的Josh Lee的建议,这种字符串插值只在Python 3.6及以上版本中添加,详见Python 3.6的新特性(在这里被称为“PEP 498:格式化字符串字面值”)。
然而,您似乎正在使用Python 3.5.2,该版本不支持该语法。

22

这是一个相当古老的问题,不确定是否在其他地方得到了答案,但遇到了同样的问题,最终陷入了一些令人困惑的页面。几分钟后弄清楚了。下面这行代码应该可以解决问题。

my_message = "I live in {}".format(state)

.format可用于3.5版本。在此记录下来,以便有类似问题的人需要。


在我尝试的所有东西中,这是唯一有效的。谢谢! - Farid

-13

对我而言(在Python 3.8.5和Sublime中),有效的方法是删除f。

message = "I live in {state}"

我觉得使用.format(state)比较容易。


11
它“工作”是指没有出现语法错误……它是否达到了预期的目的是另一个问题。 - fool4jesus
这不会抛出错误,但它也不会在字符串输出中插值你的 state 值。 - Sven E

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接