[Python-checkins] cpython (merge 3.3 -> default): Merge #17341: Include name in re error message about invalid group name.

r.david.murray python-checkins at python.org
Sun Apr 14 19:09:52 CEST 2013


http://hg.python.org/cpython/rev/227fed7a05d4
changeset:   83380:227fed7a05d4
parent:      83378:5695a64af054
parent:      83379:65db865c0851
user:        R David Murray <rdmurray at bitdance.com>
date:        Sun Apr 14 13:03:14 2013 -0400
summary:
  Merge #17341: Include name in re error message about invalid group name.

Patch by Jason Michalski.

files:
  Lib/sre_parse.py    |   5 +++--
  Lib/test/test_re.py |  11 +++++++++++
  Misc/ACKS           |   1 +
  Misc/NEWS           |   3 +++
  4 files changed, 18 insertions(+), 2 deletions(-)


diff --git a/Lib/sre_parse.py b/Lib/sre_parse.py
--- a/Lib/sre_parse.py
+++ b/Lib/sre_parse.py
@@ -600,7 +600,7 @@
                         if not name:
                             raise error("missing group name")
                         if not name.isidentifier():
-                            raise error("bad character in group name")
+                            raise error("bad character in group name %r" % name)
                     elif sourcematch("="):
                         # named backreference
                         name = ""
@@ -614,7 +614,8 @@
                         if not name:
                             raise error("missing group name")
                         if not name.isidentifier():
-                            raise error("bad character in group name")
+                            raise error("bad character in backref group name "
+                                        "%r" % name)
                         gid = state.groupdict.get(name)
                         if gid is None:
                             raise error("unknown group name")
diff --git a/Lib/test/test_re.py b/Lib/test/test_re.py
--- a/Lib/test/test_re.py
+++ b/Lib/test/test_re.py
@@ -3,6 +3,7 @@
 import io
 import re
 from re import Scanner
+import sre_constants
 import sys
 import string
 import traceback
@@ -1029,6 +1030,16 @@
         self.assertRaises(OverflowError, re.compile, r".{,%d}" % MAXREPEAT)
         self.assertRaises(OverflowError, re.compile, r".{%d,}?" % MAXREPEAT)
 
+    def test_backref_group_name_in_exception(self):
+        # Issue 17341: Poor error message when compiling invalid regex
+        with self.assertRaisesRegex(sre_constants.error, '<foo>'):
+            re.compile('(?P=<foo>)')
+
+    def test_group_name_in_exception(self):
+        # Issue 17341: Poor error message when compiling invalid regex
+        with self.assertRaisesRegex(sre_constants.error, '\?foo'):
+            re.compile('(?P<?foo>)')
+
 
 def run_re_tests():
     from test.re_tests import tests, SUCCEED, FAIL, SYNTAX_ERROR
diff --git a/Misc/ACKS b/Misc/ACKS
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -821,6 +821,7 @@
 Alexis Métaireau
 Steven Miale
 Trent Mick
+Jason Michalski
 Franck Michea
 Tom Middleton
 Stan Mihai
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -42,6 +42,9 @@
 Library
 -------
 
+- Issue #17341: Include the invalid name in the error messages from re about
+  invalid group names.
+
 - Issue #17702: os.environ now raises KeyError with the original environment
   variable name (str on UNIX), instead of using the encoded name (bytes on
   UNIX).

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list