SyntaxError:f-string表达式部分不能包含反斜杠



我有这个api调用。

payload = "{\"weight\":{\"value\":\"85.00\",\"unit":\"kg\"},\"height\":{\"value\":\"170.00\",\"unit\":\"cm\"},\"sex\":\"m\",\"age\":\"24\",\"waist\":\"34.00\",\"hip\":\"40.00\"}"

我想使用f字符串来更改这些值,但我收到一个语法错误,说我不能对f字符串使用反斜杠。我能做什么?

这是目前python中f字符串的限制。根本不允许使用后睫毛(请参阅https://mail.python.org/pipermail/python-dev/2016-August/145979.html)更新:截至2023年,任何非EOL版本的Python都支持f字符串的字符串部分中的反斜杠字符(例如,f"This is allowed"(,但仍然不允许支持大括号替换中的反斜线字符(例如f"This {'\'} is not allowed".

选项1

最好的方法是使用str.format()来实现这一点,根据https://docs.python.org/3/library/stdtypes.html#str.format

选项2

如果你非常喜欢使用反斜杠,你可以这样做:

backslash_char = "\"
my_string = f"{backslash_char}foo{bar}"

但这可能不是让代码对其他人可读的最佳方式。

选项3

如果你绝对确定你永远不会使用某个特定的字符,你也可以把这个字符作为占位符,比如

my_string = f"{🍔}foo{bar}".replace("🍔", "\")

但这也是超级变通的方法。这是一个很好的方法来引入错误的道路,如果你曾经得到一个输入与字符

选项4

正如对这个答案的评论中所提到的,另一种选择是在一些curlies中执行chr(92),如下所示:

my_string = f"This is a backslash: {chr(92)}"
class data(object):
_weight = 85.00
_height = 170.00
_sex = 'm'
_age = '24'
_waist = 34.0
_hip = 40.0
payload = f'
{{
"weight": {{
"value": "{data._weight}",
"unit": "kg"
}},
"height": {{
"value": "{data._height}",
"unit": "cm"
}},
"sex": "{data._sex}",
"age": "{data._age}",
"waist": "{data._waist}",
"hip": "{data._hip}"
}}'
print(payload)

结果:

C:\>python.exe test.py{"weight":{"value":"85.00","unit":"kg"},"height":{
C:\>python.exe test.py|jq{"重量":{"value":"85.00","单位":"kg"},"高度":{"value":"170.00","单位":"厘米"},"sex":"m","年龄":"24","腰围":"34.0","臀部":"40.0"}

最新更新