Pyparsing на самом деле не имеет опции «продолжить при ошибке», поэтому вам нужно настроить парсер так, чтобы он не вызывал ParseException в первую очередь. То, что вы можете попробовать, это добавить в свой анализатор что-то вроде | SkipTo(LineEnd())('errors*')
в качестве последней ловушки. Затем вы можете посмотреть на имя результатов ошибок, чтобы увидеть, какие строки сбились с пути (или добавить действие разбора к этому выражению, чтобы захватить не только текущую строку).
import pyparsing as pp
era = "The" + pp.oneOf("Age Years") + "of" + pp.Word(pp.alphas)
era.runTests("""
The Age of Enlightenment
The Years of Darkness
The Spanish Inquisition
""")
Печать:
The Age of Enlightenment
['The', 'Age', 'of', 'Enlightenment']
The Years of Darkness
['The', 'Years', 'of', 'Darkness']
The Spanish Inquisition
^
FAIL: Expected Age | Years (at char 4), (line:1, col:5)
Добавьте эти строки и снова вызовите runTests:
# added to handle lines that don't match
unexpected = pp.SkipTo(pp.LineEnd(), include=True)("no_one_expects")
era = era | unexpected
Печать:
The Age of Enlightenment
['The', 'Age', 'of', 'Enlightenment']
The Years of Darkness
['The', 'Years', 'of', 'Darkness']
The Spanish Inquisition
['The Spanish Inquisition']
- no_one_expects: 'The Spanish Inquisition'