2016-05-02 79 views
5

我注意到與Python的枚舉不同的行爲。如何同時使用枚舉和enum34?

我第一次驚訝地注意到輸出,這是一個int

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

>>>Color.red 
1 

然後我意識到我已經安裝而不是enum34enum

$ sudo apt-get install python-enum34 

而現在,結果是不同的:

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

我目前的應用程序正在接受enum類型,其中我得到的枚舉值爲value.value。當然,如果安裝了錯誤的枚舉,這會引發異常。

我該如何處理這個問題?

+0

你說的是一些'enum'模塊,而不是標準庫'enum'嗎?標準庫中的一個不應該給你你看到的結果。 – user2357112

+0

我不知道。我剛剛安裝了一個'ipython'並嘗試了這個例子。我得到了以前的輸出。然後我安裝了'enum34',我得到了後一個結果。 – nowox

+0

新的安裝應該給你一個ImportError或你想要的結果,這取決於你的Python版本。你確定你記得從'enum.Enum'繼承嗎?您清楚顯示的代碼片段不是從實際的解釋器會話複製粘貼的。 – user2357112

回答

4

作爲一個猜測,看起來你已經有了在3.4枚枚舉之前存在的enum包。 enum34是如此命名的,因爲之前的軟件包已經存在。

enumenum34都安裝到同一位置,因此使它們共存並不容易 - 再加上它會使代碼難以分配,因爲其中一個枚舉將位於非標準位置。

一種可能性是使用virtual envs - 然後您可以安裝venv中應用程序需要的任何枚舉。

+0

這個,venvs和你可以限制軟件包,而不用擔心項目之間的尷尬衝突。 – wom