Ошибка модуля md5 - PullRequest
       33

Ошибка модуля md5

5 голосов
/ 18 января 2010

Я использую старую версию PLY, в которой используется модуль md5 (среди прочих):

import re, types, sys, cStringIO, md5, os.path

... хотя скрипт запускается, но не без этой ошибки:

DeprecationWarning: the md5 module is deprecated; use hashlib instead

Как это исправить, чтобы ошибка исчезла?

Спасибо

Ответы [ 6 ]

9 голосов
/ 18 января 2010

Я думаю, что предупреждающее сообщение довольно простое.Вам нужно:

from hashlib import md5

или вы можете использовать python <2.5, <a href="http://docs.python.org/library/md5.html" rel="nofollow noreferrer">http://docs.python.org/library/md5.html

2 голосов
/ 18 января 2010

Как уже упоминалось, предупреждение можно отключить. И hashlib.md5 (my_string) должен сделать то же самое, что и md5.md5 (my_string).

>>> import md5
__main__:1: DeprecationWarning: the md5 module is deprecated; use hashlib instead
>>> import hashlib
>>> s = 'abc'
>>> m = md5.new(s)
>>> print s, m.hexdigest()
abc 900150983cd24fb0d6963f7d28e17f72
>>> m = hashlib.md5(s)
>>> print s, m.hexdigest()
abc 900150983cd24fb0d6963f7d28e17f72
>>> md5(s)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'module' object is not callable
>>> md5.md5(s)
<md5 HASH object @ 0x100493260>
>>> m = md5.md5(s)
>>> print s, m.hexdigest()
abc 900150983cd24fb0d6963f7d28e17f72

Как говорит @Dyno Fu: вам может понадобиться отследить, что на самом деле ваш код вызывает с md5.

2 голосов
/ 18 января 2010

Это не ошибка, это предупреждение.

Если вы все еще настаиваете на том, чтобы избавиться от него, измените код так, чтобы вместо него использовалось hashlib.

0 голосов
/ 20 апреля 2015

Как насчет этого?

try:
    import warnings
    warnings.catch_warnings()
    warnings.simplefilter("ignore")
    import md5
except ImportError as imp_err:
    raise type(imp_err), type(imp_err)("{0}{1}".format(
        imp_err.message,"Custom import message"))
0 голосов
/ 18 января 2010

Я думаю, что с предупреждением все в порядке, вы все равно можете использовать модуль md5, иначе модуль hashlib содержит класс md5

import hashlib
a=hashlib.md5("foo")
print a.hexdigest()

, который выведет контрольную сумму md5 строки "foo"

0 голосов
/ 18 января 2010

см. Документы здесь , 28.5.3 дает вам способ подавить нежелательные предупреждения. Или в командной строке при запуске сценария введите -W ignore::DeprecationWarning

...