【问题标题】:How to import auto from enum in python 2.7?如何在 python 2.7 中从枚举导入 auto?
【发布时间】:2020-11-18 18:57:28
【问题描述】:

我正在使用基于 python 2.7 的旧代码(很遗憾,无法更改)。我必须从基于 python 3.6 的一段代码中引入一个新功能。这段代码可以工作,除非它使用包枚举,据我所知,它不再维护。所以:

from enum import Enum, auto(不适用于 python 2.7)

因为我认为“自动”没有在 python 2.7 中定义。是否有可能使这条线工作?或者至少安装/导入“enum.auto”或具有相同功能的东西?

【问题讨论】:

  • enum 包在 Python 2.7 中根本不存在。
  • @AKX 如果你安装了它。
  • import enum; enum.auto = ...; import other_package_that_uses_enum 应该可以工作...

标签: python python-2.7 enums compatibility


【解决方案1】:

你有几个选择:

  • 改用aenum1
  • 复制/创建您自己的auto() 并将其填充到enum

使用aenum 是一个两步过程

  • pip install aenum
  • from enum 更改为from aenum

创建/复制 auto 并将其填充到 enum

import enum
from itertools import count

def auto(it=count()):
  return next(it)

enum.auto = auto

1 披露:我是Python stdlib Enumenum34 backportAdvanced Enumeration (aenum) 库的作者。

【讨论】:

  • 非常感谢您的完整回复:) 这足以解决我的问题。
【解决方案2】:

这可能会在紧要关头起作用:

from itertools import count

def auto(it=count()):
    return it.next()

不过,我还没有测试过。

【讨论】:

  • 注意:如果auto 仅用于单个enum,这将非常相似。如果跨多个enums 使用它会产生稍微不同的行为。此外,轻微的挑剔,但我会尝试坚持使用可移植构造,以防您还需要在 Py3 上使用它以保持跨版本兼容性,将 it.next()(仅限 Py2)替换为 next(it)(两者都适用) .
  • 是的,这绝对只是权宜之计。我没有费心让它与 Py3 兼容,因为人们应该真正使用实际的 auto,如果他们可以访问它。
  • 也感谢这个解决方案:),是第一个,超级简单,它也可以在某些情况下工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-25
  • 2010-12-11
  • 1970-01-01
相关资源
最近更新 更多