GitHub CopilotWrite better code with AI | MCP RegistryIntegrate external tools | ActionsAutomate any workflow | CodespacesInstant dev environments | IssuesPlan and track work | Code ReviewManage code changes | Code QualityEnforce quality at merge | Why GitHub | Marketplace | View all features | Enterprises | Small and medium teams | Startups | View all use cases | View all industries | View all solutions | AI | Software Development | DevOps | Security | View all topics | Customer stories | Events & webinars | Ebooks & reports | Business insights | Trust center | Partners | View all resources
Expand Up @@ -160,7 +160,7 @@ including strings reusing the same quote as the containing f-string, multi-line expressions, comments, backslashes, and unicode escape sequences.Let's cover these in detail:
* Quote reuse: in Python 3.11, reusing the same quotes as the containing f-string* Quote reuse: in Python 3.11, reusing the same quotes as the enclosing f-string raises a :exc:`SyntaxError`, forcing the user to either use other available quotes (like using double quotes or triple quotes if the f-string uses single quotes). In Python 3.12, you can now do things like this:Expand All @@ -183,11 +183,12 @@ Let's cover these in detail: >>> f"{f"{f"{f"{f"{f"{1+1}"}"}"}"}"}" '2'
* Multi-line expressions and comments: In Python 3.11, f-strings expressions must be defined in a single line even if outside f-strings expressions could span multiple lines (like literal lists being defined over multiple lines), making them harder to read. In Python 3.12 you can now define expressions spanning multiple lines and include comments on them:* Multi-line expressions and comments: In Python 3.11, f-string expressions must be defined in a single line, even if the expression within the f-string could normally span multiple lines (like literal lists being defined over multiple lines), making them harder to read. In Python 3.12 you can now define f-strings spanning multiple lines, and add inline comments:
>>> f"This is the playlist: {", ".join([ ... 'Take me back to Eden', # My, my, those eyes like fireExpand All @@ -197,10 +198,10 @@ Let's cover these in detail: 'This is the playlist: Take me back to Eden, Alkaline, Ascensionism'
* Backslashes and unicode characters: before Python 3.12 f-string expressions couldn't contain any ``\`` character. This also affected unicode escaped sequences (such as ``\N{snowman}``) as these contain the ``\N`` part that previously could not be part of expression components of f-strings. Now, you can define expressions like this: couldn't contain any ``\`` character. This also affected unicode :ref:`escape sequences <escape-sequences>` (such as ``\N{snowman}``) as these containthe ``\N`` part that previously could not be part of expression components off-strings. Now, you can define expressions like this:
>>> print(f"This is the playlist: {"\n".join(songs)}") This is the playlist: Take me back to EdenExpand All @@ -212,7 +213,7 @@ Let's cover these in detail: See :pep:`701` for more details.
As a positive side-effect of how this feature has been implemented (by parsing f-stringswith the PEG parser (see :pep:`617`), now error messages for f-strings are more precisewith :pep:`the PEG parser <617>`, now error messages for f-strings are more preciseand include the exact location of the error. For example, in Python 3.11, the followingf-string raises a :exc:`SyntaxError`:
Expand Down