Python3.6にアップデートしたら、Python2.7で使えてたものが動作しなくなった

投稿者: Anonymous

Pythonのsympyモジュールのsympy.printing.mathmlを使用しています。

Python3.6で、以下のtest1.pyを実行すると、エラーが起きてしまいます。

test1.py

import sys, json
from sympy import *
from sympy.printing.mathml import mathml

print(mathml(1/6))

test1.pyの実行結果(エラーの内容)

$ python test1.py

    Traceback (most recent call last):
      File "test1.py", line 5, in <module>
        print(mathml("1/6"))
      File "/home/vagrant/.pyenv/versions/3.6.7/lib/python3.6/site-packages/sympy/printing/mathml.py", line 1906, in mathml
        return MathMLContentPrinter(settings).doprint(expr)
      File "/home/vagrant/.pyenv/versions/3.6.7/lib/python3.6/site-packages/sympy/printing/mathml.py", line 68, in doprint
        unistr = mathML.toxml()
    AttributeError: 'str' object has no attribute 'toxml'

test2.pyのように分数のない単純な状態で実行すると、Python3.6でもエラーは起きません。

test2.py

import sys, json
from sympy import *
from sympy.printing.mathml import mathml

print(mathml(1))

Python2.7を使用していた時には、このようなエラーがありませんでした。Python3.6に切り替えてから起こるようになりました。
分数表記に限らず、全体的にPython3.6ではsympy.printing.mathmlでエラーが起きるようになっている気がします。
何が原因で、どうすればエラーなく実行できるようになりますでしょうか?

Sympyのバージョンは1.4です。
Windows10にVirtualBoxとVagrantをインストールし、Ubuntuの仮想環境を構築して開発しています。Ubuntuのバージョンが14だったのが問題かと思い、16.04.6 LTSにアップデートしてみましたが関係なくエラーが出続けています。

解決

コメント欄で教えて頂いた内容で

from sympy import *
from sympy.printing.mathml import mathml

print(mathml(sympify("1/6")))

とすると、通りました。

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *