Brent Westbrook
38c074e67d
Catch syntax errors in nested interpolations before Python 3.12 ( #20949 )
...
Summary
--
This PR fixes the issue I added in #20867 and noticed in #20930 . Cases
like this
cause an error on any Python version:
```py
f"{1:""}"
```
which gave me a false sense of security before. Cases like this are
still
invalid only before 3.12 and weren't flagged after the changes in
#20867 :
```py
f'{1: abcd "{'aa'}" }'
# ^ reused quote
f'{1: abcd "{"\n"}" }'
# ^ backslash
```
I didn't recognize these as nested interpolations that also need to be
checked
for invalid expressions, so filtering out the whole format spec wasn't
quite
right. And `elements.interpolations()` only iterates over the outermost
interpolations, not the nested ones.
There's basically no code change in this PR, I just moved the existing
check
from `parse_interpolated_string`, which parses the entire string, to
`parse_interpolated_element`. This kind of seems more natural anyway and
avoids
having to try to recursively visit nested elements after the fact in
`parse_interpolated_string`. So viewing the diff with something like
```
git diff --color-moved --ignore-space-change --color-moved-ws=allow-indentation-change main
```
should make this more clear.
Test Plan
--
New tests
2025-10-20 09:03:13 -04:00
..
2025-08-22 17:03:22 -04:00
2025-10-15 09:50:56 +02:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-10-15 09:50:56 +02:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-10-15 09:50:56 +02:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-10-15 09:50:56 +02:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-10-17 21:35:48 +00:00
2025-08-22 17:03:22 -04:00
2025-10-15 09:50:56 +02:00
2025-10-15 09:50:56 +02:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-10-15 09:50:56 +02:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-10-15 09:50:56 +02:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-10-15 09:50:56 +02:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-10-15 09:50:56 +02:00
2025-10-15 09:50:56 +02:00
2025-10-15 09:50:56 +02:00
2025-10-15 09:50:56 +02:00
2025-10-15 09:50:56 +02:00
2025-10-15 09:50:56 +02:00
2025-10-15 09:50:56 +02:00
2025-10-15 09:50:56 +02:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-10-15 09:50:56 +02:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-10-15 09:50:56 +02:00
2025-10-15 09:50:56 +02:00
2025-08-22 17:03:22 -04:00
2025-09-16 15:53:28 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-10-15 09:50:56 +02:00
2025-10-15 09:50:56 +02:00
2025-10-15 09:50:56 +02:00
2025-09-25 13:52:24 -04:00
2025-10-15 09:50:56 +02:00
2025-10-17 21:35:48 +00:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-10-15 09:50:56 +02:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-09-24 19:32:55 +00:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-10-15 14:21:24 +00:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-10-15 09:50:56 +02:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-10-15 09:50:56 +02:00
2025-10-20 09:03:13 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-10-15 09:50:56 +02:00
2025-10-15 09:50:56 +02:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-10-15 09:50:56 +02:00
2025-10-15 09:50:56 +02:00
2025-10-15 09:50:56 +02:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-10-15 09:50:56 +02:00
2025-10-15 09:50:56 +02:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-10-17 21:35:48 +00:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-10-15 09:50:56 +02:00
2025-10-15 09:50:56 +02:00
2025-10-15 09:50:56 +02:00
2025-10-15 09:50:56 +02:00
2025-10-15 09:50:56 +02:00
2025-10-15 09:50:56 +02:00
2025-10-15 09:50:56 +02:00
2025-10-15 09:50:56 +02:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-10-13 14:13:27 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-10-15 09:50:56 +02:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-09-03 10:13:05 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-10-15 09:50:56 +02:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-10-17 21:35:48 +00:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-10-15 09:50:56 +02:00
2025-08-22 17:03:22 -04:00
2025-10-15 09:50:56 +02:00
2025-10-15 09:50:56 +02:00
2025-10-15 09:50:56 +02:00
2025-10-15 09:50:56 +02:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-10-15 09:50:56 +02:00
2025-08-22 17:03:22 -04:00
2025-10-15 09:50:56 +02:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-10-15 09:50:56 +02:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-09-16 15:53:28 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-10-15 09:50:56 +02:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-09-24 19:32:55 +00:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-10-15 14:21:24 +00:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-10-15 09:50:56 +02:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-10-15 14:21:24 +00:00
2025-10-15 09:50:56 +02:00
2025-10-15 09:50:56 +02:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-10-15 09:50:56 +02:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-10-15 09:50:56 +02:00
2025-08-22 17:03:22 -04:00
2025-10-15 09:50:56 +02:00
2025-10-15 09:50:56 +02:00
2025-08-22 17:03:22 -04:00
2025-10-15 09:50:56 +02:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-10-15 09:50:56 +02:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-10-15 09:50:56 +02:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-10-15 09:50:56 +02:00
2025-10-15 09:50:56 +02:00
2025-10-15 09:50:56 +02:00
2025-08-22 17:03:22 -04:00
2025-10-15 09:50:56 +02:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-08-22 17:03:22 -04:00
2025-09-25 13:52:24 -04:00
2025-08-22 17:03:22 -04:00