2to3 未将 .sort() 解析为 sorted()

2to3 not resolving .sort() to sorted()

我正在尝试在 Win10 上使用 2to3 将库从 Py 2.7.x 转换为 Py 3.7.x。参考 here.

我看到要转换 Python 的某些部分,您需要显式添加 Fixers,特别是:

idioms

This optional fixer performs several transformations that make Python code more idiomatic. Type comparisons like type(x) is SomeClass and type(x) == SomeClass are converted to isinstance(x, SomeClass). while 1 becomes while True. This fixer also tries to make use of sorted() in appropriate places. For example, this block

L = list(some_iterable) L.sort() is changed to

L = sorted(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 的结果。真正的问题是 Py2 和 Py3 之间字典 .keys() 的 return 值之间的变化。

来自 lib 的片段我是 运行 通过 2to3:

keys = timeSamples.keys()
keys.sort()

我改成了:

keys = sorted(timeSamples.keys())

如果我真的阅读了错误消息,我会看到正在尝试调用 .sort() on dict_keys type not list in Py3。