2016-05-02 12 views
5

Tôi nhận thấy một hành vi khác với enum trên Python.Làm thế nào để sống với cả enum và enum34?

tôi lần đầu tiên được ngạc nhiên khi nhận thấy đầu ra cho đây là một int:

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

>>>Color.red 
1 

Sau đó, tôi nhận ra tôi đã enum cài đặt thay vì enum34:

$ sudo apt-get install python-enum34 

Và bây giờ, kết quả là khác nhau :

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

Ứng dụng hiện tại của tôi đang chấp nhận các loại enum nơi tôi nhận được giá trị của enum với value.value. Tất nhiên điều này sẽ nâng cao một ngoại lệ nếu enum sai được cài đặt.

Tôi có thể giải quyết vấn đề này bằng cách nào?

+0

Bạn đang nói về một số mô-đun 'enum' khác với thư viện chuẩn' enum'? Người trong thư viện chuẩn không nên cho bạn kết quả mà bạn đã thấy. – user2357112

+0

Tôi không biết. Tôi chỉ chạy một cài đặt mới của 'ipython' và thử ví dụ này. Tôi đã có đầu ra cũ. Sau đó, tôi cài đặt 'enum34' và tôi nhận được kết quả sau. – nowox

+0

Cài đặt mới sẽ cho bạn một ImportError hoặc kết quả bạn muốn, tùy thuộc vào phiên bản Python của bạn. Bạn có chắc là bạn đã nhớ kế thừa từ 'enum.Enum'? Các đoạn mã bạn đã hiển thị rõ ràng không được sao chép từ phiên phiên dịch thực tế. – user2357112

Trả lời

4

Giả sử, có vẻ như bạn đã có gói enum đã tồn tại trước 3.4 Enum. enum34 được đặt tên như vậy vì gói trước đó đã tồn tại.

Cả hai enumenum34 cài đặt vào cùng một vị trí, để làm cho chúng tồn tại cùng nhau không dễ dàng - cộng với mã sẽ khó phân phối là một trong những vị trí không chuẩn.

Một khả năng là sử dụng virtual envs - sau đó bạn có thể cài đặt bất kỳ enum nào là cần thiết cho ứng dụng trong venv.

+0

Điều này, venvs và bạn có thể giới hạn các gói và không phải lo lắng về xung đột vụng về giữa các dự án. – wom

Các vấn đề liên quan