3 Stimmen

Pyparsing.operatorPrecedence löst keinen Fehler aus, wenn ein ungültiger String übergeben wird

Ich möchte einen String analysieren, der einen booleschen Ausdruck darstellt. Der folgende Code basiert auf vielen Beispielen und verwendet pyparsing's operatorPrecedence Helper.

Das Problem ist, dass ich möchte, dass der Code eine Ausnahme auslöst, wenn der String nicht sinnvoll analysiert werden kann. Im aktuellen Zustand gehen viele ungültige Ausdrücke einfach stillschweigend durch und der falsche Ausdruck wird zurückgegeben.

import pyparsing

_A = pyparsing.Literal('A')
_B = pyparsing.Literal('B')

bool_operand = pyparsing.Or((_A, _B))

precedence_list = [("NOT", 1, pyparsing.opAssoc.RIGHT),
        ("AND", 2, pyparsing.opAssoc.LEFT),
        ("OR", 2, pyparsing.opAssoc.LEFT),]

bool_parser = pyparsing.operatorPrecedence(bool_operand, precedence_list)

print bool_parser.parseString('A OR B OR NOT A') # Ein gültiger String
print bool_parser.parseString('A NOT AND B') # Ein ungültiger String

Das gibt aus:

[['A', 'OR', 'B', 'OR', ['NOT', 'A']]]
['A']

Der erste String funktioniert, aber der zweite String löst nicht die gewünschte Ausnahme aus.

Ideen, wie ich das machen kann? Ich bin nicht besonders vertraut mit pyparsing, also könnte ich dort etwas übersehen haben.

3voto

PaulMcG Punkte 59178

Ändern Sie Ihre Definitionen von A_ und B_, um die Keyword Klasse anstelle der Literal Klasse zu verwenden.

Außerdem, wenn Sie parseString aufrufen, fügen Sie parseAll=True hinzu, damit der gesamte Eingabe analysiert wird.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X