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?
32 Answers
This is currently a limitation of f-strings in python. Backslashes aren't allowed in them at all (see )
Option 1
The best way would be to instead use use str.format() to accomplish this, per
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)}" 5class 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" } 0