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) Update: As of 2023, any version of Python that isn't EOL supports the backslash character within the string portion of the f-string (for example, f"This \ is allowed"
), however support for backslash characters within the brace substitution is still disallowed (for example, f"This {'\\'} is not allowed"
.
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)}"