8000 Merge pull request #493 · pyparsing/pyparsing@173bc16 · GitHub
[go: up one dir, main page]

Skip to content

Commit 173bc16

Browse files
authored
Merge pull request #493
* Limit error message overriding when raising exception in Forward; add test for forward exception interception
1 parent a60ec32 commit 173bc16

File tree

2 files changed

+25
-1
lines changed

2 files changed

+25
-1
lines changed

pyparsing/core.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4547,7 +4547,8 @@ def parseImpl(self, instring, loc, doActions=True):
45474547
try:
45484548
return self.expr._parse(instring, loc, doActions, callPreParse=False)
45494549
except ParseBaseException as pbe:
4550-
pbe.msg = self.errmsg
4550+
if not isinstance(self, Forward) or self.customName is not None:
4551+
pbe.msg = self.errmsg
45514552
raise
45524553
else:
45534554
raise ParseException(instring, loc, "No expression defined", self)

tests/test_unit.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9897,6 +9897,29 @@ def modify_upper(self, tokens):
98979897
msg=f"unexpected exception line ({exception_line!r})",
98989898
)
98999899

9900+
9901+
def testForwardReferenceException(self):
9902+
token = pp.Forward()
9903+
num = pp.Word(pp.nums)
9904+
num.setName("num")
9905+
text = pp.Word(pp.alphas)
9906+
text.setName("text")
9907+
fail = pp.Regex(r"\\[A-Za-z]*")("name")
9908+
def parse_fail(s, loc, toks):
9909+
raise pp.ParseFatalException(s, loc, f"Unknown symbol: {toks['name']}")
9910+
fail.set_parse_action(parse_fail)
9911+
token <<= num | text | fail
9912+
9913+
# If no name is given, do not intercept error messages
9914+
with self.assertRaises(pp.ParseFatalException, msg="Unknown symbol: \\fail"):
9915+
token.parse_string("\\fail")
9916+
9917+
# If name is given, do intercept error messages
9918+
token.set_name("token")
9919+
with self.assertRaises(pp.ParseFatalException, msg="Expected token, found.*"):
9920+
token.parse_string("\\fail")
9921+
9922+
99009923
def testMiscellaneousExceptionBits(self):
99019924
pp.ParserElement.verbose_stacktrace = True
99029925

0 commit comments

Comments
 (0)
0