https://github.com/python/cpython/commit/0851700a9d99ca4bebd8d5f9d73c8c9ab1084405
commit: 0851700a9d99ca4bebd8d5f9d73c8c9ab1084405
branch: main
author: Sergey B Kirpichev <[email protected]>
committer: serhiy-storchaka <[email protected]>
date: 2026-05-24T10:24:59Z
summary:

gh-119949: Refactor test_exc() helper in test_format.py (GH-135452)

Use assertRaisesRegex() context and fix
https://github.com/python/cpython/pull/119781#pullrequestreview-2088240959

* address review: minimize diff

files:
M Lib/test/test_format.py

diff --git a/Lib/test/test_format.py b/Lib/test/test_format.py
index 00f1ab44b0a8fa..5d322cb444cfb6 100644
--- a/Lib/test/test_format.py
+++ b/Lib/test/test_format.py
@@ -68,33 +68,20 @@ def testcommon(formatstr, args, output=None, limit=None, 
overflowok=False):
     testformat(b_format, args, b_output, limit, overflowok)
     testformat(ba_format, args, ba_output, limit, overflowok)
 
-def test_exc(formatstr, args, exception, excmsg):
-    try:
-        testformat(formatstr, args)
-    except exception as exc:
-        if str(exc) == excmsg:
-            if verbose:
-                print("yes")
-        else:
-            if verbose: print('no')
-            print('Unexpected ', exception, ':', repr(str(exc)))
-            raise
-    except:
-        if verbose: print('no')
-        print('Unexpected exception')
-        raise
-    else:
-        raise TestFailed('did not get expected exception: %s' % excmsg)
-
-def test_exc_common(formatstr, args, exception, excmsg):
-    # test str and bytes
-    test_exc(formatstr, args, exception, excmsg)
-    if isinstance(args, dict):
-        args = {k.encode('ascii'): v for k, v in args.items()}
-    test_exc(formatstr.encode('ascii'), args, exception, excmsg)
 
 class FormatTest(unittest.TestCase):
 
+    def check_exc(self, formatstr, args, exception, excmsg):
+        with self.assertRaisesRegex(exception, re.escape(excmsg)):
+            testformat(formatstr, args)
+
+    def check_exc_common(self, formatstr, args, exception, excmsg):
+        # test str and bytes
+        self.check_exc(formatstr, args, exception, excmsg)
+        if isinstance(args, dict):
+            args = {k.encode('ascii'): v for k, v in args.items()}
+        self.check_exc(formatstr.encode('ascii'), args, exception, excmsg)
+
     def test_common_format(self):
         # test the format identifiers that work the same across
         # str, bytes, and bytearrays (integer, float, oct, hex)
@@ -271,6 +258,7 @@ def test_common_format(self):
 
         if verbose:
             print('Testing exceptions')
+        test_exc_common = self.check_exc_common
         test_exc_common('abc %', (), ValueError, "stray % at position 4")
         test_exc_common('abc % %s', 1, ValueError,
                         "stray % at position 4 or unexpected format character 
'%' at position 6")
@@ -365,6 +353,7 @@ def test_str_format(self):
         # Test exception for unknown format characters, etc.
         if verbose:
             print('Testing exceptions')
+        test_exc = self.check_exc
         test_exc('abc %b', 1, ValueError,
                  "unsupported format %b at position 4")
         test_exc("abc %\nd", 1, ValueError,
@@ -468,6 +457,7 @@ def __bytes__(self):
         # Test exception for unknown format characters, etc.
         if verbose:
             print('Testing exceptions')
+        test_exc = self.check_exc
         test_exc(b"abc %\nd", 1, ValueError,
                  "stray % at position 4 or unexpected format character with 
code 0x0a at position 5")
         test_exc(b"abc %'d", 1, ValueError,

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]

Reply via email to