Организованы ли исключения python-ldap в иерархии? - PullRequest
3 голосов
/ 12 июля 2011

У меня есть такой код:

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 ]

2 голосов
/ 12 июля 2011

Да, существует иерархия исключений, вы всегда должны начинать отлавливать более конкретные исключения и, наконец, отлавливать более широкие исключения. Иерархия обычно определяется наследованием.

В вашем случае, поскольку вы перехватываете это исключение последним, это должно быть потому, что исключение тайм-аута, которое вы перехватываете первым, ссылается на другой пакет или пространство имен. И последнее исключение, которое вы ловите, это суперкласс других исключений.

1 голос
/ 12 июля 2011

Если issubclass(type(raised), named_in_except_clause), сработает условие исключений.Поэтому, если возбуждается исключение «is a» ldap.SERVER_DOWN, и оно не является ни одним из исключений в предыдущих пунктах, за исключением предложений, сработает последнее условие кроме. Документация LDAP , похоже, ничего не говорит об иерархии специфичных для LDAP исключений, но вы всегда можете изучить ее в REPL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...