Python 2to3 脚本不工作 - Unicode 错误
Python 2to3 Script Not Working - Unicode Error
我找到了一个包含大量 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\scriptsto3.py" -w -n --no-diffs {}'.format(ex3folder+os.sep+f))
print('All done!')
if __name__ == '__main__':
makepython3()
问题出在这里:
os.system('"C:\Users\HP\....
^-- interpreted as a \U unicode escape
尝试使用原始字符串:
os.system(r'"C:\Users\HP\....
\U
转义序列在 python 3 中引入,这说明脚本在 python 2 中有效。但是原始字符串应该 always 在处理文字 windows 路径时使用。
只需使用 os.path.sep
和 os.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"
我找到了一个包含大量 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\scriptsto3.py" -w -n --no-diffs {}'.format(ex3folder+os.sep+f))
print('All done!')
if __name__ == '__main__':
makepython3()
问题出在这里:
os.system('"C:\Users\HP\....
^-- interpreted as a \U unicode escape
尝试使用原始字符串:
os.system(r'"C:\Users\HP\....
\U
转义序列在 python 3 中引入,这说明脚本在 python 2 中有效。但是原始字符串应该 always 在处理文字 windows 路径时使用。
只需使用 os.path.sep
和 os.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"