axiacore / py-expression-eval

MIT License
149 stars 54 forks source link

Error in parsing '1E3*x' and '1e3*x' #32

Closed hyperkang closed 5 years ago

hyperkang commented 6 years ago
>>> from py_expression_eval import Parser
>>> parser = Parser()
>>> parser.parse('1E3*x')
Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "/home/kang/Envs/simright_cpython_2.7.13/lib/python2.7/site-packages/py_expression_eval/__init__.py", line 610, in parse
    self.error_parsing(self.pos, 'unexpected variable')
  File "/home/kang/Envs/simright_cpython_2.7.13/lib/python2.7/site-packages/py_expression_eval/__init__.py", line 639, in error_parsing
    raise Exception(self.errormsg)
Exception: parse error [column 3]: unexpected variable

>>> parser.parse('1e3*x')
Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "/home/kang/Envs/simright_cpython_2.7.13/lib/python2.7/site-packages/py_expression_eval/__init__.py", line 610, in parse
    self.error_parsing(self.pos, 'unexpected variable')
  File "/home/kang/Envs/simright_cpython_2.7.13/lib/python2.7/site-packages/py_expression_eval/__init__.py", line 639, in error_parsing
    raise Exception(self.errormsg)
Exception: parse error [column 3]: unexpected variable

>>> parser.parse('1000*x')
<py_expression_eval.Expression instance at 0x7f72039d4998>

As both 1e3 and 1E3 are valid numbers in Python, they shall be allowed to be used in expression.

Btw, I noticed that E and PI are defined as constants in py-expression-eval. Do we have options to disable such implication? As E and PI may appear in expressions as normal variable names, and they are both valid variable names in Python.