1

我有一个 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 只是“通过”。错误很神秘:

lib2to3.pgen2.parse.ParseError: bad input: type=0, value='', context=('\n', (2, 0))

如果 py_script 是“”,或者它是多行字符串,它就可以工作。知道什么可能导致简单案例失败吗?

4

1 回答 1

1

传入 "pass\n" 似乎使它起作用。事实上,任何最后没有“\n”的单行python都会导致解析器失败,例如“1+1”。这可能是由于 python 对间距/缩进的特殊敏感性,类似于使用 code.InteractiveInterpreter 实例运行源时格式化代码字符串所需的小心,但我没有深入挖掘。

于 2015-12-31T04:08:18.457 回答