순서 블록에 대한 유용한 오류 메시지를 인쇄 할 인색 받기 (영숫자 여야 함) 전체 텍스트를 구성합니다.나는이 보이는 텍스트를 구문 분석하는 데 인색 (파이썬 PEG 파서 라이브러리)을 사용하고
이grammar = Grammar(r"""
file = block+
block = _ "block" _ alphanum _ start_brace _ block_body _ end_brace _
block_body = alphanum+
alphanum = ~"[_A-z0-9]+"
_ = ~"[\\n\\s]*"
start_brace = "{"
end_brace = "}"
""")
print (grammar.parse(text))
난 데 문제는 첫 번째 후 모든 블록의 구문 분석 오류가 있다면 내가 쓸모없는 오류 메시지입니다 : 여기에 문법입니다. 이 유용한 오류 메시지가 제공
text = """
block block_name_0
{
!foo
}
block block_name_1
{
bar
}
"""
: 예를 제공하기 위해, 다음과 같은 텍스트가 생각 나는이 얻을
text = """
block block_name_0
{
foo
}
block block_name_1
{
!bar
}
"""
: 그러나
[omitted stack trace]
File "/lib/parsimonious/expressions.py", line 127, in match
raise error
parsimonious.exceptions.ParseError: Rule 'block_body' didn't match at '!foo
}
을 나는 다음과 같은 텍스트가있는 경우 오류 :
File "/lib/parsimonious/expressions.py", line 112, in parse
raise IncompleteParseError(text, node.end, self)
parsimonious.exceptions.IncompleteParseError: Rule 'file' matched in its entirety, but it didn't consume all the text. The non-matching portion of the text begins with 'block block_name_1
{' (line 7, column 1).
시퀀스의 첫 번째 인스턴스 (첫 번째 블록)와 일치하는 것처럼 보이지만 두 번째 블록에서 실패하면 모든 것을 실패로 간주하지 않습니다. 이는 내가 원하는 작업입니다. 나에게 블럭 0과 비슷한 에러를주기를 원한다. 그래서 블럭 전체가 파싱되지 않을뿐만 아니라 블럭이 잘못되었는지 정확히 알 수있다.
도움이 될 것입니다.