mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
gh-105938: Emit a SyntaxWarning for escaped braces in an f-string (#105939)
This commit is contained in:
parent
155577de1b
commit
6586cee27f
3 changed files with 18 additions and 6 deletions
|
@ -13,6 +13,7 @@ import re
|
|||
import types
|
||||
import decimal
|
||||
import unittest
|
||||
import warnings
|
||||
from test import support
|
||||
from test.support.os_helper import temp_cwd
|
||||
from test.support.script_helper import assert_python_failure, assert_python_ok
|
||||
|
@ -904,7 +905,7 @@ x = (
|
|||
self.assertEqual(f'2\x203', '2 3')
|
||||
self.assertEqual(f'\x203', ' 3')
|
||||
|
||||
with self.assertWarns(DeprecationWarning): # invalid escape sequence
|
||||
with self.assertWarns(SyntaxWarning): # invalid escape sequence
|
||||
value = eval(r"f'\{6*7}'")
|
||||
self.assertEqual(value, '\\42')
|
||||
with self.assertWarns(SyntaxWarning): # invalid escape sequence
|
||||
|
@ -1037,7 +1038,7 @@ x = (
|
|||
]
|
||||
for case, expected_result in deprecated_cases:
|
||||
with self.subTest(case=case, expected_result=expected_result):
|
||||
with self.assertWarns(DeprecationWarning):
|
||||
with self.assertWarns(SyntaxWarning):
|
||||
result = eval(case)
|
||||
self.assertEqual(result, expected_result)
|
||||
self.assertEqual(fr'\{{\}}', '\\{\\}')
|
||||
|
@ -1046,6 +1047,12 @@ x = (
|
|||
self.assertEqual(fr'\}}{1+1}', '\\}2')
|
||||
self.assertEqual(fr'{1+1}\}}', '2\\}')
|
||||
|
||||
def test_fstring_backslash_before_double_bracket_warns_once(self):
|
||||
with warnings.catch_warnings(record=True) as w:
|
||||
eval(r"f'\{{'")
|
||||
self.assertEqual(len(w), 1)
|
||||
self.assertEqual(w[0].category, SyntaxWarning)
|
||||
|
||||
def test_fstring_backslash_prefix_raw(self):
|
||||
self.assertEqual(f'\\', '\\')
|
||||
self.assertEqual(f'\\\\', '\\\\')
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue