【问题标题】:2to3 not resolving .sort() to sorted()2to3 未将 .sort() 解析为 sorted()
【发布时间】:2021-01-09 19:53:09
【问题描述】:

我正在尝试在 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)

我在这里错过了什么?

【问题讨论】:

  • list.sort() 仍然是一个东西 - 它对列表进行了适当的排序。 sorted(..) 创建一个新的排序列表并返回它..

标签: python python-3.x python-2.7 python-2to3


【解决方案1】:

looks like 修复器实际上只适用于一个

x = list(z)
x.sort()

模式,没有什么更花哨的。毕竟2to3不做类型分析。

【讨论】:

    【解决方案2】:

    凌晨 3 点尝试从 github 转换 lib 的产物。真正的问题是字典 .keys() 的返回值在 Py2 和 Py3 之间的变化。

    我正在运行 2to3 的 lib 中的片段:

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

    我改成了:

    keys = sorted(timeSamples.keys())
    

    如果我真的阅读了错误消息,我会看到试图在 Py3 中未列出的 dict_keys 类型上调用 .sort()。

    【讨论】:

      猜你喜欢
      • 2013-12-10
      • 1970-01-01
      • 2012-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多