2009-09-14 49 views
8

python 2.6 báo cáo rằng mô-đun md5 đã lỗi thời và hashlib nên được sử dụng. Nếu tôi thay đổi import md5 thành import hashlib Tôi sẽ giải quyết cho python 2.5 và python 2.6, nhưng không phải cho python 2.4, mà không có mô-đun hashlib (dẫn đến một ImportError, mà tôi có thể bắt).hashlib/md5. Khả năng tương thích với python 2.4

Bây giờ, để khắc phục, tôi có thể thực hiện thử/nắm bắt và xác định hàm getMd5() sao cho một hàm thích hợp được xác định theo kết quả của khối thử. Giải pháp này có được không?

Làm cách nào bạn giải quyết vấn đề này trong trường hợp tổng quát hơn, ví dụ: bạn có hai thư viện khác nhau với cùng một giao diện khách quan nhưng khác nhau và bạn muốn sử dụng nó. đầu tiên không được tìm thấy.

Trả lời

18

Nói chung các cấu trúc sau đây là tốt:

try: 
    import module 
except ImportError: 
    # Do something else. 

Trong trường hợp cụ thể của bạn, có lẽ:

try: 
    from hashlib import md5 
except ImportError: 
    from md5 import md5 
2

Trong trường hợp các module có cùng một giao diện, như họ làm ở đây, giải pháp bạn mô tả là tốt. Bạn cũng có thể tách riêng quá trình nhập vào mô-đun riêng của mình như sau:

hash.py 
---- 
try: 
    import hashlib.md5 as md5mod 
except ImportError: 
    import md5 as md5mod 

----- 
prog.py 
----- 
from hash import md5mod 
.... 

Trong trường hợp chúng có giao diện khác nhau, bạn cần viết bộ điều hợp để căn chỉnh các giao diện như bạn đã chỉ định.

+5

Lưu ý rằng câu lệnh 'except' trần truồng ở đây khá nguy hiểm, vì nó sẽ ẩn các lỗi trong các mô-đun được tìm thấy nhưng ném ngoại lệ trong nguồn của mô-đun. – Triptych

+0

Cảm ơn, tôi đã đủ điều kiện tuyên bố ngay bây giờ. – jkp

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