Python 2to3脚本无法工作

2024-10-03 21:29:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我发现了一个包含大量Python2文件的repo,其中包含一个将它们转换为python3的脚本。但是,当我运行它时,会出现以下错误:

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:\Users\HP\AppData\Local\Programs\Python\Python37-32\Tools\scripts\2to3.py" -w -n --no-diffs {}'.format(ex3folder+os.sep+f))

    print('All done!')

if __name__ == '__main__':
    makepython3()

Tags: inpy路径formatifosfilessystem
2条回答

问题在于:

os.system('"C:\Users\HP\....
              ^  interpreted as a \U unicode escape

尝试使用原始字符串:

os.system(r'"C:\Users\HP\....

\U转义序列是在python3中引入的,这说明脚本在python2中工作。但是在处理文本窗口路径时,应该始终使用原始字符串。你知道吗

只需使用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"

相关问题 更多 >