Python 2to3 脚本不起作用 - Unicode 错误



我找到了一个包含大量 Python2 文件的存储库,其中包含将它们转换为 Python 3 的脚本。但是,当我运行它时,我收到以下错误:

SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 3-4: truncated UXXXXXXXX escape

我所做的唯一更改是将路径添加到2to3,而不仅仅是2to3,因为这不在我的路径中。

请问关于如何使其工作的任何建议?

import os
def makepython3():
"""This is a script to transform all the solutions into 
Python 3 solutions."""
files = os.listdir('exercises')
exfolder = 'exercises'
ex3folder = 'exercisespy3'
if not os.path.exists(ex3folder):
os.mkdir(ex3folder)
for f in files:
os.system('cp {} {}'.format(exfolder+os.sep+f, ex3folder+os.sep+f))
if f.endswith('.py'):
os.system('"C:UsersHPAppDataLocalProgramsPythonPython37-32Toolsscripts2to3.py" -w -n --no-diffs {}'.format(ex3folder+os.sep+f))
print('All done!')
if __name__ == '__main__':
makepython3()

问题就在这里:

os.system('"C:UsersHP....
^-- interpreted as a U unicode escape

尝试使用原始字符串:

os.system(r'"C:UsersHP....

U转义序列是在 Python 3 中引入的,这解释了该脚本在 Python 2 中工作。但是在处理文本窗口路径时,应始终使用原始字符串。

只需将os.path.sepos.path.join一起使用即可构建路径,而不是硬编码的字符串。

from os.path import join, sep
windows_exe_path = join(
sep, 
"C:" + sep, 
"Users", sep, 
"HP", sep, 
"AppData", sep, 
"Local", sep,
"Programs", sep, 
"Python", sep 
"Python37-32", sep, 
"Tools", sep,
"scripts", sep, 
"2to3.py",
)

否则,/也可以使用。

windows_exe_path = "C:/Users/HP/AppData/Local/Programs/Python/Python37-32/Tools/scripts/2to3.py"

相关内容

最新更新