diff options
author | R David Murray <rdmurray@bitdance.com> | 2013-04-14 17:03:14 (GMT) |
---|---|---|
committer | R David Murray <rdmurray@bitdance.com> | 2013-04-14 17:03:14 (GMT) |
commit | bf71f7d654244bbc9a089e3f539fa78d283e2010 (patch) | |
tree | c05d9de02009dadd27440d826d9c21d459d44162 /Lib | |
parent | 255fb3e9f37bc0a171d279d476148d994985d12d (diff) | |
parent | 26dfaac9ac0cf9a34006ab52a0e0cc4e39b772fa (diff) | |
download | cpython-bf71f7d654244bbc9a089e3f539fa78d283e2010.zip cpython-bf71f7d654244bbc9a089e3f539fa78d283e2010.tar.gz cpython-bf71f7d654244bbc9a089e3f539fa78d283e2010.tar.bz2 |
Merge #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.py | 5 | ||||
-rw-r--r-- | Lib/test/test_re.py | 11 |
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 |