I have this api call.
payload = "{\\"weight\\":{\\"value\\":\\"85.00\\",\\"unit\":\\"kg\\"},\\"height\\":{\\"value\\":\\"170.00\\",\\"unit\\":\\"cm\\"},\\"sex\\":\\"m\\",\\"age\\":\\"24\\",\\"waist\\":\\"34.00\\",\\"hip\\":\\"40.00\\"}"
I want to use a f string to change those values but I get a syntax error saying I can't use backslash for f strings. What can I do?
This is currently a limitation of f-strings in python. Backslashes aren't allowed in them at all (see https://mail.python.org/pipermail/python-dev/2016-August/145979.html)
Option 1
The best way would be to instead use use str.format() to accomplish this, per https://docs.python.org/3/library/stdtypes.html#str.format
Option 2
If you're super keen on using backslashes, you could do something like this:
backslash_char = "\\"
my_string = f"{backslash_char}foo{bar}"
But that's probably not the best way to make your code readable to other people.
Option 3
If you're absolutely certain you'll never use a particular character, you could also put in that character as a placeholder, something like
my_string = f"🍔foo{bar}".replace("🍔", "\\")
But that's also super workaround-y. And it's a great way to introduce bugs down the road, if you ever get an input with that char in it.
Option 4
As mentioned in the comments to this answer, another option would be to do chr(92) inside some curlies, as below:
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)
Result:
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" }
Result via 'jq': (check here for info on '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"
}