我有这个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"}