【问题标题】:Python 2to3 Script Not Working - Unicode ErrorPython 2to3 脚本不工作 - Unicode 错误
【发布时间】:2019-09-05 07:14:57
【问题描述】:

我发现了一个包含大量 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:\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()

【问题讨论】:

    标签: python python-2to3


    【解决方案1】:

    问题出在这里:

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

    尝试使用原始字符串:

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

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

    【讨论】:

      【解决方案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"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-08-20
        • 1970-01-01
        • 2013-11-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-08-19
        相关资源
        最近更新 更多