为什么python f-string不接受计算结果为字符串的条件表达式?

5vf7fwbs  于 2023-04-22  发布在  Python
关注(0)|答案(3)|浏览(112)

此问题已在此处有答案

Why can't you put quotes inside a python f-string? [closed](1个答案)
Why can I not embed a string literal inside an f-string? [duplicate](2个答案)
2天前关闭。
我遇到了一个问题,在python 3.7中,我不能将一个计算为字符串的条件表达式传递给一个f字符串。
下面是我第一次尝试的。条件语句周围的括号不会改变运行这段代码的结果。我检查过了。

condition = True
print(f"blah blah {("one" if condition else "two")}")

上面的代码引发SyntaxError: invalid syntax并突出显示one作为错误源(引号没有突出显示)。
但是当我在f字符串之外计算条件表达式时,SyntaxError不会被提升:

condition = True
temp = ("one" if condition else "two")
print(f"blah blah {temp}")

上面的代码成功运行。
我甚至尝试修改反斜杠,得到了一个不同的SyntaxError

print(f"blah blah {(\"one\" if condition else \"two\")}")

上面的代码引发SyntaxError: f-string expression part cannot include a backslash
这不是什么大问题,但我很想知道为什么其他表达式(如var1*var2等)可以成功计算,而我的条件表达式却不能。

yv5phkfx

yv5phkfx1#

你需要混合使用单引号和双引号,否则你会产生无效的字符串:

condition = True
print(f'blah blah {("one" if condition else "two")}')

# or
print(f"blah blah {('one' if condition else 'two')}")

输出:

blah blah one

您目前拥有:

#      |--string1---|   |------string2------|   |s3|
print(f"blah blah {("one" if condition else "two")}")

因此,{/(在第一个字符串中是打开的,但永远不会关闭。

093gszye

093gszye2#

与其尝试转义""字符,不如混合使用单引号和双引号。一个用于表达式内部,一个用于表达式外部。例如:

condition = True
print(f'blah blah {("one" if condition else "two")}')
4uqofj5v

4uqofj5v3#

只是使用不同类型的引号:

print(f"blah blah {'one' if condition else 'two'}")

相关问题