2015-05-20 66 views
1

我有一個Python 2.7格式的腳本數據庫。在我的Python 3應用程序中加載後,我想將它們轉換爲Python 3格式,而無需將每個腳本寫入文件。我嘗試了以下內容:在內存中使用2to3腳本

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是「」,或者如果它是一個多字符串。任何想法可能導致簡單案例失敗?

回答

1

傳遞「pass \ n」似乎使它工作。事實上,任何在最後沒有「\ n」的單行python都會導致解析器失敗,例如, 「1 + 1」。這可能是由於python對間距/縮進的特定敏感度,與使用代碼時使用格式化代碼字符串時所需的謹慎類似.InterractiveInterpreter實例來運行源,但我沒有深入。

+0

我終於找到了,但忘了我發佈了這個。你是對的,\ n是問題,即使在最後一行也必須存在。我已標記你的答案。 – Schollii

+0

酷 - 這是您爲內存中轉換編寫的有用的小實用程序函數。 – bc19