Python httplib2 AttributeError: у объекта 'builtin_function_or_method' нет атрибута 'new' - PullRequest
3 голосов
/ 04 марта 2012

Я пытаюсь вычеркнуть текст из Википедии. Поскольку httplib2 уже установлен, я подумал, что буду его использовать.

Когда я прохожу простой поиск по их базовым примерам , первый пример выдает мне эту ошибку.

> import httplib2
> h = httplib2.Http(".cache")
> url = "http://code.google.com/p/httplib2/"
> h.request(url, "GET")

Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
 File "/Library/Frameworks/EPD64.framework/Versions/7.2/lib/python2.7/site-packages/httplib2/__init__.py", line 978, in request
  cached_value = self.cache.get(cachekey)
 File "/Library/Frameworks/EPD64.framework/Versions/7.2/lib/python2.7/site-packages/httplib2/__init__.py", line 625, in get
  cacheFullPath = os.path.join(self.cache, self.safe(key))
 File "/Library/Frameworks/EPD64.framework/Versions/7.2/lib/python2.7/site-packages/httplib2/__init__.py", line 189, in safename
  filemd5 = md5.new(filename).hexdigest()
AttributeError: 'builtin_function_or_method' object has no attribute 'new'

Я работаю в Mac OS X, версия Python: 7.2-2 (64-разрядная версия), распространение Enthought.

Я думаю, что это может быть проблема с ошибочной установкой, но опять же httplib2 был установлен с другими пакетами, которые я использовал. Кроме того, я мог бы попытаться переустановить httplib2, но я не решаюсь сделать это, думая, что это может сломать другие вещи, которые в настоящее время работают.

1 Ответ

2 голосов
/ 05 марта 2012

Поскольку модуль md5 устарел (см. http://docs.python.org/library/md5.html), В httplib2 есть код, который динамически проверяет наличие старой функции md5.new или новой функции hashlib.md5. Он находится в верхней части модуля и в версии что у меня это выглядит так:

# remove depracated warning in python2.6
try:
    from hashlib import sha1 as _sha, md5 as _md5
except ImportError:
    import sha
    import md5
    _sha = sha.new
    _md5 = md5.new

Полагаю, ваша версия httplib2 слишком старая и не имеет этого кода, или она как-то не так.

Если у вас есть самая новая версия (или по какой-то причине вы не можете / не хотите обновлять), вы, вероятно, можете исправить это динамически в вашей программе, но я не собираюсь продолжать в том же духе, в надежде, что обновление это исправлю.

...