[3.14] gh-137314: Fix incorrect treatment of format specs in raw fstrings (GH-137328) (#137344)

gh-137314: Fix incorrect treatment of format specs in raw fstrings (GH-137328)
(cherry picked from commit 0153d82a5a)

Co-authored-by: Pablo Galindo Salgado <Pablogsal@gmail.com>
This commit is contained in:
Miss Islington (bot) 2025-08-03 18:36:58 +02:00 committed by GitHub
parent 42b58cfa42
commit cf57f4fac3
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 42 additions and 1 deletions

View file

@ -1831,6 +1831,34 @@ def test_newlines_in_format_specifiers(self):
for case in valid_cases:
compile(case, "<string>", "exec")
def test_raw_fstring_format_spec(self):
# Test raw f-string format spec behavior (Issue #137314).
#
# Raw f-strings should preserve literal backslashes in format specifications,
# not interpret them as escape sequences.
class UnchangedFormat:
"""Test helper that returns the format spec unchanged."""
def __format__(self, format):
return format
# Test basic escape sequences
self.assertEqual(f"{UnchangedFormat():\xFF}", 'ÿ')
self.assertEqual(rf"{UnchangedFormat():\xFF}", '\\xFF')
# Test nested expressions with raw/non-raw combinations
self.assertEqual(rf"{UnchangedFormat():{'\xFF'}}", 'ÿ')
self.assertEqual(f"{UnchangedFormat():{r'\xFF'}}", '\\xFF')
self.assertEqual(rf"{UnchangedFormat():{r'\xFF'}}", '\\xFF')
# Test continuation character in format specs
self.assertEqual(f"""{UnchangedFormat():{'a'\
'b'}}""", 'ab')
self.assertEqual(rf"""{UnchangedFormat():{'a'\
'b'}}""", 'ab')
# Test multiple format specs in same raw f-string
self.assertEqual(rf"{UnchangedFormat():\xFF} {UnchangedFormat():\n}", '\\xFF \\n')
if __name__ == '__main__':
unittest.main()