在内存中的脚本

时间:2015-05-20 04:13:54

标签: python python-2to3

我有一个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;或者它是多行字符串,则它有效。知道可能导致简单案例失败的原因吗?

1 个答案:

答案 0 :(得分:1)

传递&#34;传递\ n&#34;似乎使它工作。事实上,没有&#34; \ n&#34;的任何单行python最后导致解析器失败,例如&#34; 1 + 1&#34 ;.这可能是由于python对间距/缩进的特殊敏感性,类似于在使用code.InteractiveInterpreter实例来运行源代码时格式化代码字符串所需的注意,但我没有深入挖掘。 / p>