Skip to content

Commit 024fe47

Browse files
committed
Catching exceptions raising PatternError
1 parent 55a1e29 commit 024fe47

1 file changed

Lines changed: 27 additions & 10 deletions

File tree

mathics/builtin/patterns.py

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636

3737

3838
from mathics.builtin.base import Builtin, BinaryOperator, PostfixOperator
39-
from mathics.builtin.base import PatternObject
39+
from mathics.builtin.base import PatternObject, PatternError
4040
from mathics.builtin.lists import python_levelspec, InvalidLevelspecError
4141

4242
from mathics.core.expression import (
@@ -206,6 +206,9 @@ def apply_levelspec(self, expr, rules, ls, evaluation, options):
206206
return result
207207
except InvalidLevelspecError:
208208
evaluation.message('General', 'level', ls)
209+
except PatternError as e:
210+
evaluation.message('Replace','reps', rules)
211+
209212

210213

211214
class ReplaceAll(BinaryOperator):
@@ -267,13 +270,19 @@ class ReplaceAll(BinaryOperator):
267270

268271
def apply(self, expr, rules, evaluation):
269272
'ReplaceAll[expr_, rules_]'
273+
try:
274+
rules, ret = create_rules(rules, expr, 'ReplaceAll', evaluation)
275+
276+
if ret:
277+
return rules
278+
279+
result, applied = expr.apply_rules(rules, evaluation)
280+
return result
281+
except PatternError as e:
282+
evaluation.message('Replace','reps', rules)
283+
270284

271-
rules, ret = create_rules(rules, expr, 'ReplaceAll', evaluation)
272-
if ret:
273-
return rules
274285

275-
result, applied = expr.apply_rules(rules, evaluation)
276-
return result
277286

278287

279288
class ReplaceRepeated(BinaryOperator):
@@ -309,8 +318,12 @@ class ReplaceRepeated(BinaryOperator):
309318

310319
def apply_list(self, expr, rules, evaluation):
311320
'ReplaceRepeated[expr_, rules_]'
312-
313-
rules, ret = create_rules(rules, expr, 'ReplaceRepeated', evaluation)
321+
try:
322+
rules, ret = create_rules(rules, expr, 'ReplaceRepeated', evaluation)
323+
except PatternError as e:
324+
evaluation.message('Replace','reps', rules)
325+
return None
326+
314327
if ret:
315328
return rules
316329

@@ -374,9 +387,13 @@ def apply(self, expr, rules, max, evaluation):
374387
if max_count is None or max_count < 0:
375388
evaluation.message('ReplaceList', 'innf', 3)
376389
return
390+
try:
391+
rules, ret = create_rules(
392+
rules, expr, 'ReplaceList', evaluation, extra_args=[max])
393+
except PatternError as e:
394+
evaluation.message('Replace','reps', rules)
395+
return None
377396

378-
rules, ret = create_rules(
379-
rules, expr, 'ReplaceList', evaluation, extra_args=[max])
380397
if ret:
381398
return rules
382399

0 commit comments

Comments
 (0)