我注意到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
获取枚举值。当然,如果安装了错误的枚举,这将引发异常。
我该如何处理这个问题?
答案 0 :(得分:4)
作为猜测,看起来你有3.4 {Enum}之前存在的enum
包。 enum34
之所以如此命名是因为之前的包已经存在。
enum
和enum34
都安装到同一位置,因此将它们共存并不容易 - 而且它会使您的代码难以分发,因为其中一个枚举将在非标准的位置。
一种可能性是使用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
。
我没有大量使用它,这可能不理想,但是它适合我的需求,可能对其他人有帮助。