“分配前已引用本地变量'e'”,此错误是什么意思?如何解决此错误?

时间:2018-08-06 18:26:05

标签: python python-3.x artificial-intelligence

我正在尝试使用 del.icio.us API并遵循 Programming Collective Intelligence

一书中的示例

当我在python 3.6.2中使用以下命令时:

>>>从Deliciousrec导入*

>>> delusers = initializeUserDict('programming')

我收到此错误:

SELECT EXISTS(
  SELECT 1
  FROM information_schema.columns
  WHERE 
      table_name='messages'
     and column_key = 'PRI'
) As HasPrimaryKey

我无法打开pydelicious-0.6-py3.6.egg并访问要求在此处进行修改的init文件。 以前有没有人见过这种类型的错误。我该如何解决?

1 个答案:

答案 0 :(得分:4)

该库的PyPI page是用过去时写的:

  

是del.icio.us书签的HTTP API的完整Python接口。

它的主页是一个Github仓库,上面写着:

  

古老的书记工作(--2010)

自2010年以来唯一的更新是:

  

[2016] del.icio.us自2009年左右起就消失了,并重定向到Delicious.com。目前,位于del.icio.us的是另一个登录页面。不知道他们现在在干什么。”

甚至the old 2010 page说:

  

重要提示:pydelicious尚未更新为使用OAuth协议。具有Yahoo帐户/电子邮件的新用户将无法使用此库。

因此,该库极有可能从未针对Python 3.x,它所依赖的库的最新版本或新del.icio.us进行过更新。


但是与此同时,如果您想自己调试它,就可以。

要查看.egg归档文件中的源代码,可以在Python中进行操作:

>>> import deliciousrec
>>> import inspect
>>> inspect.getsource(deliciousrec)

…,或者您可以使用自己喜欢的ZIP文件工具提取.egg存档,因为这就是所有.egg文件。

…,或者您可以克隆GitHub存储库或view it online,这可能是最好的解决方案。


正如Hamms在评论中指出的那样,如果您查看the function that's raising,它就是这样做的:

except urllib2.HTTPError, e:
    # reraise unexpected protocol errors as PyDeliciousException
    raise PyDeliciousException, "%s" % e

在Python 2中,这意味着要处理urllib2.HTTPError类型的异常,并将e绑定到该函数其余部分的异常。

在Python 2.6中,已不赞成使用此新语法:

except urllib2.HTTPError as e:
    # reraise unexpected protocol errors as PyDeliciousException
    raise PyDeliciousException, "%s" % e

在Python 3中,旧语法完全消失了,因此现在是非法的。

2to3工具将自动为您解决此特定问题,但可能无法解决所有问题;您需要手动将代码移植到3.x。当然,这可能没有任何用处,因为您正试图调用在2010年消失的API。