问题描述
我正在尝试在 Win10 上使用 2to3 将库从 Py 2.7.x 转换为 Py 3.7.x。以下参考来自here。
我已经看到要转换 Python 的某些部分,您需要显式添加 Fixers,具体来说:
成语
这个可选的固定器执行几个转换,使 Python 代码更地道。像 type(x) 这样的类型比较是 SomeClass 和 type(x) == SomeClass 被转换为 isinstance(x,SomeClass)。 while 1 变为 while True。此修复程序还尝试利用 sorted() 在适当的地方。比如这个块
L = list(some_iterable) L.sort() 改为
L = 排序(some_iterable)
所以我将它添加到我的命令行中:
2to3 --output-dir=C:\my\py3\module -f all -f buffer -f idioms -f set_literal -f ws_comma -W -n C:\my\py2\module
2to3 将在 C:\my\py3\module 文件夹中生成正确的文件,但 list.sort() 尚未解析为 sorted(list)
我在这里遗漏了什么?
解决方法
它looks like修复程序实际上只适用于
x = list(z)
x.sort()
模式,没有什么更好的。毕竟2to3不做类型分析。
,尝试在凌晨 3 点从 github 转换 lib 的产品。真正的问题是 Py2 和 Py3 之间字典 .keys() 的返回值之间的变化。
来自 lib 的片段我正在运行 2to3:
keys = timeSamples.keys()
keys.sort()
我改为:
keys = sorted(timeSamples.keys())
如果我真的阅读了错误消息,就会看到试图在 dict_keys 类型上调用 .sort() 而不是 Py3 中的列表。