我有一个Python 2.7格式的脚本数据库。在我的Python 3应用程序中加载后,我想将它们转换为Python 3格式,而无需将每个脚本写入文件。我尝试了以下方法:
from lib2to3 import refactor
def convert_2to3(py_script):
avail_fixes = refactor.get_fixers_from_package('lib2to3.fixes')
py_converter = refactor.RefactoringTool(avail_fixes)
ast = py_converter.refactor_string(py_script, '<script>')
return str(ast)
然而,有时这会失败;例如,如果py_script只是&#34;传递&#34;。这个错误很神秘:
lib2to3.pgen2.parse.ParseError: bad input: type=0, value='', context=('\n', (2, 0))
如果py_script是&#34;&#34;或者它是多行字符串,则它有效。知道可能导致简单案例失败的原因吗?
答案 0 :(得分:1)
传递&#34;传递\ n&#34;似乎使它工作。事实上,没有&#34; \ n&#34;的任何单行python最后导致解析器失败,例如&#34; 1 + 1&#34 ;.这可能是由于python对间距/缩进的特殊敏感性,类似于在使用code.InteractiveInterpreter实例来运行源代码时格式化代码字符串所需的注意,但我没有深入挖掘。 / p>