|
36 | 36 |
|
37 | 37 |
|
38 | 38 | from mathics.builtin.base import Builtin, BinaryOperator, PostfixOperator |
39 | | -from mathics.builtin.base import PatternObject |
| 39 | +from mathics.builtin.base import PatternObject, PatternError |
40 | 40 | from mathics.builtin.lists import python_levelspec, InvalidLevelspecError |
41 | 41 |
|
42 | 42 | from mathics.core.expression import ( |
@@ -206,6 +206,9 @@ def apply_levelspec(self, expr, rules, ls, evaluation, options): |
206 | 206 | return result |
207 | 207 | except InvalidLevelspecError: |
208 | 208 | evaluation.message('General', 'level', ls) |
| 209 | + except PatternError as e: |
| 210 | + evaluation.message('Replace','reps', rules) |
| 211 | + |
209 | 212 |
|
210 | 213 |
|
211 | 214 | class ReplaceAll(BinaryOperator): |
@@ -267,13 +270,19 @@ class ReplaceAll(BinaryOperator): |
267 | 270 |
|
268 | 271 | def apply(self, expr, rules, evaluation): |
269 | 272 | '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 | + |
270 | 284 |
|
271 | | - rules, ret = create_rules(rules, expr, 'ReplaceAll', evaluation) |
272 | | - if ret: |
273 | | - return rules |
274 | 285 |
|
275 | | - result, applied = expr.apply_rules(rules, evaluation) |
276 | | - return result |
277 | 286 |
|
278 | 287 |
|
279 | 288 | class ReplaceRepeated(BinaryOperator): |
@@ -309,8 +318,12 @@ class ReplaceRepeated(BinaryOperator): |
309 | 318 |
|
310 | 319 | def apply_list(self, expr, rules, evaluation): |
311 | 320 | '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 | + |
314 | 327 | if ret: |
315 | 328 | return rules |
316 | 329 |
|
@@ -374,9 +387,13 @@ def apply(self, expr, rules, max, evaluation): |
374 | 387 | if max_count is None or max_count < 0: |
375 | 388 | evaluation.message('ReplaceList', 'innf', 3) |
376 | 389 | 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 |
377 | 396 |
|
378 | | - rules, ret = create_rules( |
379 | | - rules, expr, 'ReplaceList', evaluation, extra_args=[max]) |
380 | 397 | if ret: |
381 | 398 | return rules |
382 | 399 |
|
|
0 commit comments