我回到了一些旧代码(不是那么久 - 大约6个月),突然间我得到了一个相当莫名的错误。让我特别感到惊讶的是,我的代码中的不是 - 它与我的Jython安装的stdlib副本一样,我没有以任何方式触及(这是我本地的机器,所以没有其他人触摸它。)
最重要的是,违规代码看起来对我来说完全无害。它是标准的imaplib.py,看起来没有问题。我得到的错误是:
File "C:\jython2.5.3\Lib\imaplib.py", line 504, in login
return login(user, password)
NameError: global name 'login' is not defined
代码是:
def login(self, user, password):
"""Identify client using plaintext password.
(typ, [data]) = <instance>.login(user, password)
NB: 'password' will be quoted.
"""
typ, dat = self._simple_command('LOGIN', user, self._quote(password))
if typ != 'OK':
self.error(dat[-1])
time.sleep(15)
return login(user, password)
self.state = 'AUTH'
return typ, dat
那只是一个香草递归,是吗?
关于如何解决这个问题的任何想法?我很难过。
答案 0 :(得分:0)
而不是:
return login(user, password)
使用:
return self.login(user, password)
(使用方法,而不是全局函数)
答案 1 :(得分:0)
我终于找到了潜在的问题。事实证明,有人更改了帐户的身份验证政策,因此即使使用正确的凭据,Google也不允许登录。我没有详细说明在这种情况下为什么名称“登录”未定义,但我确实知道在我们的谷歌帐户上设置正确的访问权限消除了这个问题。