2016-05-02 3 views
5

ho notato un comportamento diverso con enum in Python.Come vivere con enum ed enum34?

primo luogo sono stato sorpreso a notare l'uscita di questo è stato un int:

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

>>>Color.red 
1 

Poi ho capito che dovevo enum installato al posto di enum34:

$ sudo apt-get install python-enum34 

E ora, il risultato è diverso :

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

La mia applicazione corrente accetta enum tipi in cui ottengo il valore della enum con value.value. Ovviamente ciò solleverà un'eccezione se viene installato l'enum errato.

Come posso affrontare questo problema?

+0

Stai parlando di alcune 'enum' modulo diverso dal' enum' standard biblioteca? Quello della libreria standard non avrebbe dovuto darti il ​​risultato che hai visto. – user2357112

+0

Non lo so. Ho appena eseguito una nuova installazione di 'ipython' e ho provato questo esempio. Ho ottenuto la prima uscita. Quindi ho installato 'enum34' e ho ottenuto il risultato finale. – nowox

+0

Una nuova installazione dovrebbe aver fornito un ImportError o il risultato desiderato, a seconda della versione di Python. Sei sicuro di esserti ricordato di ereditare da "enum.Enum"? I frammenti di codice che hai mostrato chiaramente non sono copiati da una sessione di interprete reale. – user2357112

risposta

4

Come una supposizione, sembra che hai avuto il pacchetto enum che esisteva prima della 3.4 Enum è venuto a essere. enum34 è così chiamato perché quel pacchetto precedente esisteva già.

Entrambe enum e enum34 installano nello stesso percorso, quindi renderle coesistenti non è facile, in più renderebbe il vostro codice difficile da distribuire in quanto una delle enumerazioni sarebbe in una posizione non standard.

Una possibilità è utilizzare virtual envs - quindi è possibile installare qualsiasi enum necessario per l'applicazione nello venv.

+0

Questo, venvs e si può limitare i pacchetti e non preoccuparsi di collisioni scomode tra progetti. – wom