如何与enum和enum34一起生活?

时间:2016-05-02 20:14:14

标签: python enums

我注意到Python上的枚举有不同的行为。

我第一次惊讶地注意到这个输出是int

>>>import enum
>>>class Color(enum.Enum):
       red = 1

>>>Color.red
1

然后我意识到我安装了enum而不是enum34

$ sudo apt-get install python-enum34

现在,结果不同了:

>>>Color.red
<Color.red: 1>

我当前的应用程序正在接受enum类型,其中我使用value.value获取枚举值。当然,如果安装了错误的枚举,这将引发异常。

我该如何处理这个问题?

2 个答案:

答案 0 :(得分:4)

作为猜测,看起来你有3.4 {Enum}之前存在的enum包。 enum34之所以如此命名是因为之前的包已经存在。

enumenum34都安装到同一位置,因此将它们共存并不容易 - 而且它会使您的代码难以分发,因为其中一个枚举将在非标准的位置。

一种可能性是使用virtual envs - 然后您可以在venv中安装应用程序所需的任何枚举。

答案 1 :(得分:0)

在另一个答案中适应@ Jerry101的评论,这就是我的目的:

def is_using_enum34(self):
    try:
        import enum
        return enum.__file__.__str__().endswith("__init__.pyc")
    except:
        return False
    return False

我注意到了:
枚举34:enum.__file__ == __init__.pyc
枚举:enum.__file__ == enum.pyc

我没有大量使用它,这可能不理想,但是它适合我的需求,可能对其他人有帮助。