Search code examples
pythonparsingif-statementoperatorsmathematical-expressions

Python if-statement with variable mathematical operator


I'm trying to insert a variable mathematical operator into a if statement, an example of what I'm trying to achieve in parsing user-supplied mathematical expressions:

maths_operator = "=="

if "test" maths_operator "test":
       print "match found"

maths_operator = "!="

if "test" maths_operator "test":
       print "match found"
else:
       print "match not found"

obviously the above fails with SyntaxError: invalid syntax. I've tried using exec and eval but neither work in an if statement, what options do I have to get around this?


Solution

  • Use the operator package together with a dictionary to look up the operators according to their text equivalents. All of these must be either unary or binary operators to work consistently.

    import operator
    ops = {'==' : operator.eq,
           '!=' : operator.ne,
           '<=' : operator.le,
           '>=' : operator.ge,
           '>'  : operator.gt,
           '<'  : operator.lt}
    
    maths_operator = "=="
    
    if ops[maths_operator]("test", "test"):
        print "match found"
    
    maths_operator = "!="
    
    if ops[maths_operator]("test", "test"):
        print "match found"
    else:
        print "match not found"