summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorR David Murray <rdmurray@bitdance.com>2013-04-14 17:00:54 (GMT)
committerR David Murray <rdmurray@bitdance.com>2013-04-14 17:00:54 (GMT)
commit26dfaac9ac0cf9a34006ab52a0e0cc4e39b772fa (patch)
tree36227d0c87ddb055c1b4b2f13020b0b7b19652e4 /Lib
parentf2fa5fc794834da5282218458bec3fa16da6671f (diff)
downloadcpython-26dfaac9ac0cf9a34006ab52a0e0cc4e39b772fa.zip
cpython-26dfaac9ac0cf9a34006ab52a0e0cc4e39b772fa.tar.gz
cpython-26dfaac9ac0cf9a34006ab52a0e0cc4e39b772fa.tar.bz2
#17341: Include name in re error message about invalid group name.
Patch by Jason Michalski.
Diffstat (limited to 'Lib')
-rw-r--r--Lib/sre_parse.py5
-rw-r--r--Lib/test/test_re.py11
2 files changed, 14 insertions, 2 deletions
diff --git a/Lib/sre_parse.py b/Lib/sre_parse.py
index 2ebce89..9e0501f 100644
--- a/Lib/sre_parse.py
+++ b/Lib/sre_parse.py
@@ -600,7 +600,7 @@ def _parse(source, state):
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 @@ def _parse(source, state):
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
index e90c770..8bc74a2 100644
--- a/Lib/test/test_re.py
+++ b/Lib/test/test_re.py
@@ -3,6 +3,7 @@ from test.support import verbose, run_unittest, gc_collect, bigmemtest, _2G, \
import io
import re
from re import Scanner
+import sre_constants
import sys
import string
import traceback
@@ -1029,6 +1030,16 @@ class ReTests(unittest.TestCase):
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