cosmos-1905-14
cosmos-1905-14

Reputation: 1283

How to fix Unterminated expression in f-string; missing close brace in python?

I want to use f string formatting instead of print. However, I get these errors: Unterminated expression in f-string; missing close brace Expected ')'

var="ab-c"
f"{var.replace("-","")}text123"

I tried to use single quote f'' and also double brackets but neither of them worked. Any idea about how to fix this?

Upvotes: 14

Views: 37392

Answers (3)

Mark Tolonen
Mark Tolonen

Reputation: 177600

Before Python 3.12:

For f"{var.replace("-","")}text123", Python parses f"{var.replace(" as a complete string, which you can see has an opening { and opening (, but then the string is terminated. It first expected a ) and eventually a }, hence the error you see.

To fix it, Python allows ' or " to enclose a string, so use one for the f-string and the other for inside the string:

f"{var.replace('-','')}text123"

or:

f'{var.replace("-","")}text123'

Triple quotes can also be used if internally you have both ' and "

f'''{var.replace("-",'')}text123'''

or:

f"""{var.replace("-",'')}text123"""

As of Python 3.12:

Some f-string limitations have been lifted and the OP's original code now works:

Python 3.12.0 (tags/v3.12.0:0fb18b0, Oct  2 2023, 13:03:39) [MSC v.1935 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> var="ab-c"
>>> f"{var.replace("-","")}text123"
'abctext123'

See What's New in Python 3.12, PEP 701: Syntactic formalization of f-strings.

Upvotes: 36

Vaidøtas I.
Vaidøtas I.

Reputation: 554

var = "ab-c"
f"{var.replace('-','')}text123"

always use a different quote character than the ones inside the f-string

Upvotes: 2

Corralien
Corralien

Reputation: 120409

Use single quotes:

var="ab-c"
f'{var.replace("-","")}text123'

# display abctext123

Upvotes: 3

Related Questions