私はSymPy式に解析する必要がある文字列のリストを持っています。問題は、そのうちの1人がSympifyError例外を発生させた場合、次の文字列は例外の前に同じ文字列が返された同じSymPy式を返しません。例えば同じ入力に対して異なる式を返すSympify
、以下のコード:
import traceback
from sympy.core import sympify
from sympy.core.evaluate import evaluate
from sympy.core.sympify import SympifyError
if __name__ == '__main__':
equations = ['Eq(sin(pi/6), x/10)', 'Eq(x, 3))', 'Eq(sin(pi/6), x/10)']
for equation in equations:
try:
with evaluate(False):
expr = sympify(equation)
print(expr)
except SympifyError:
traceback.print_exc()
出力:追加**1
あります(第一及び第三の文字列が同じであるが、それらの出力が異なること
Traceback (most recent call last):
Eq(sin(pi/6), x/10)
File "C:\Users\vini_\Anaconda3\lib\site-packages\sympy\core\sympify.py", line 354, in sympify
Eq(sin(pi/6**1), x/10**1)
expr = parse_expr(a, local_dict=locals, transformations=transformations, evaluate=evaluate)
File "C:\Users\vini_\Anaconda3\lib\site-packages\sympy\parsing\sympy_parser.py", line 889, in parse_expr
code = stringify_expr(s, local_dict, global_dict, transformations)
File "C:\Users\vini_\Anaconda3\lib\site-packages\sympy\parsing\sympy_parser.py", line 791, in stringify_expr
for toknum, tokval, _, _, _ in generate_tokens(input_code.readline):
File "C:\Users\vini_\Anaconda3\lib\site-packages\sympy\parsing\sympy_tokenize.py", line 384, in generate_tokens
raise TokenError("EOF in multi-line statement", (lnum, 0))
sympy.parsing.sympy_tokenize.TokenError: ('EOF in multi-line statement', (2, 0))
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:/Users/vini_/PycharmProjects/bugfix_simpify/main.py", line 22, in <module>
expr = sympify(equation)
File "C:\Users\vini_\Anaconda3\lib\site-packages\sympy\core\sympify.py", line 356, in sympify
raise SympifyError('could not parse %r' % a, exc)
sympy.core.sympify.SympifyError: Sympify of expression 'could not parse 'Eq(x, 3))'' failed, because of exception being raised:
TokenError: ('EOF in multi-line statement', (2, 0))
注秒。 1つは意図的に間違っています(アンバランス括弧)。私は元の文字列のできるだけ近くに表現が必要なのでevaluate(False)
行を使用しています。
私は何が間違っていますか?出力が同じ入力文字列で同じになるように修正する方法はありますか?
環境:Python 3.6.1; SymPy 1.1.1
ありがとうございます。