gpt4 book ai didi

python - 在 Python 中捕获 imaplib 异常(使用 IMAPClient 包)

转载 作者:太空宇宙 更新时间:2023-11-03 13:22:23 25 4
gpt4 key购买 nike

我正在使用外部库 IMAPClient。当登录失败时,我看到这个错误:imaplib.error: [AUTHENTICATIONFAILED] Authentication failed.

当我尝试 except imaplib.error: 时,我得到:AttributeError: 'module' object has no attribute 'error'

imaplib的文档说异常应该是IMAP4.error那么为什么 IMAPClient 会引发 imaplib.error,我该如何捕捉它?

最佳答案

您看到的错误消息:

imaplib.error: [AUTHENTICATIONFAILED] Authentication failed.

正在尽可能地描述错误;在异常发生时,异常类被称为“imaplib.error”,因为引发它的人已经这样描述了它(稍后会详细介绍)。我四处寻找,我想我已经为你找到了:

Python 2.7.2 (default, Nov 14 2011, 19:37:59) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import imaplib
>>> imaplib.IMAP4.error
<class 'imaplib.error'>

我打开了 imaplib.py 文件,发现了一个看起来很奇怪的异常抛出机制。 “IMAP4”是一个类,“error”是在 IMAP4 类内部定义的类。 Python 似乎没有“嵌套”类——只是类定义。因此,一旦“error”类的对象存在,它就是在“imaplib”范围内定义的“error”类的对象。 “错误”类定义在“IMAP4”类库定义中这一事实与 Python 无关。另一方面,为了让您在这样的对象存在之前描述“error”类的对象,您需要将其引用为 imaplib.IMAP4.error 以便 Python 找到定义你正在谈论的类(class)。

非常令人困惑,我知道,在我开始调查这个问题之前我并不知道所有这些。这是一个简短的例子:

Python 2.7.2 (default, Nov 14 2011, 19:37:59) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> class foo(object):
... class bar(object):
... pass
... def b(self):
... return bar()
...
>>> bar
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'bar' is not defined
>>> foo.bar
<class '__main__.bar'>
>>> foo().bar()
<__main__.bar object at 0x10048dd10>

基本上,您试图做一件非常合理的事情,但 imaplib 库处理异常抛出的方式有点奇怪,让您的生活变得困难。长话短说,您应该 try catch imaplib.IMAP4.error 并继续您的生活。

关于python - 在 Python 中捕获 imaplib 异常(使用 IMAPClient 包),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9759772/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com