3

我正在尝试从维基百科中抓取文本。由于已经安装了 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 Distribution。

我认为这可能是安装错误的问题,但是 httplib2 再次安装了我一直在使用的其他软件包。另外,我可以尝试重新安装 httplib2,但我很犹豫,认为它可能会破坏当前正在运行的其他东西。

4

1 回答 1

2

由于 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 版本太旧并且没有此代码,或者它以某种方式出错。

如果您确实有最新版本(或者由于某种原因无法/不愿意升级),您可能可以在您的程序中动态修复它,但我不会继续在那一行,希望升级能修复它.

于 2012-03-04T20:19:25.540 回答