python-ldap的异常是否在层次结构中组织?

时间:2011-07-12 14:08:42

标签: python exception ldap custom-exceptions

我有这样的代码:

try:
    ....

    l.simple_bind_s(user, password)

except ldap.CONNECT_ERROR, e:
    sys.exit(1)

except ldap.BUSY, e:
    sys.exit(2)

except ldap.OPT_NETWORK_TIMEOUT, e:
    sys.exit(3)

except ldap.TIMEOUT, e: 
    sys.exit(4)

except ldap.SERVER_DOWN, e:
    sys.exit(5)

我试图捕捉各种异常。但是,所有异常都属于SERVER_DOWN。例如,当存在超时异常时,它会落入SERVER_DOWN异常等等。我想知道是否存在类似异常的层次结构,这就是为什么它总是落入SERVER_DOWN状态。或者此代码还有其他问题吗?你对这个问题有什么看法吗? 提前谢谢。

2 个答案:

答案 0 :(得分:2)

是的,存在异常层次结构,您应始终开始捕获更具体的异常,并最终捕获更广泛的异常。层次结构通常由继承确定。

在您的情况下,因为您最后捕获该异常,应该是因为您首先捕获的超时异常是引用另一个包或命名空间。你捕获的最后一个异常是其他异常的超类。

答案 1 :(得分:1)

如果issubclass(type(raised), named_in_except_clause),则会触发except子句。因此,如果引发了“是”ldap.SERVER_DOWN的异常并且它不是前面的except子句中的异常,则会触发最后一个except子句。 LDAP documentation似乎没有说明特定于LDAP的异常的层次结构,但您可以随时在REPL中进行探索。