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

17 浏览
0 Comments

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

这个问题已经有答案了

如何在使用.format(或f-string)的字符串中转义花括号({})字符?

如何在f-string中使用换行符“\\n”格式化输出?

我有这个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字符串中使用反斜杠。我该怎么办?

admin 更改状态以发布 2023年5月20日
0
0 Comments

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": { "value": "170.00", "unit": "cm" }, "sex": "m", "age": "24", "waist": "34.0", "hip": "40.0" }

通过'jq'获取结果:   (有关'jq'信息,请单击此处)

C:\>python.exe test.py | jq .
{
  "weight": {
    "value": "85.00",
    "unit": "kg"
  },
  "height": {
    "value": "170.00",
    "unit": "cm"
  },
  "sex": "m",
  "age": "24",
  "waist": "34.0",
  "hip": "40.0"
}
0
0 Comments

这是Python中f-string的一个限制。它们根本不允许使用反斜杠(请参见https://mail.python.org/pipermail/python-dev/2016-August/145979.html

选项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

如此答案中的评论所提到的,另一个选择是在一些大括号中使用chr(92),如下所示:

my_string = f"This is a backslash: {chr(92)}"

0