Syntaxerror: F-String Expression Part Cannot Include a Backslash

Syntaxerror: F-String Expression Part Cannot Include a Backslash

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?

3

2 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)}"
5
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"
}
0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Marcus Vance
Author

Marcus Vance

Marcus Vance is a cybersecurity auditor and technology writer dedicated to educating the public about online safety, data privacy regulations, enterprise security, and emerging cyber threats.