объект python ldap.LDAPError отклоняет доступ к словарю - PullRequest
2 голосов
/ 25 ноября 2010

используя python 2.6.5 и python-ldap 2.3.10, у меня есть следующая проблема: При определенных обстоятельствах мое приложение вызывает ошибку ldap.LDAPError или, если быть более точным, ошибку ldap.INVALID_SYNTAX. Я уловил эту ошибку и хотел бы обработать прикрепленное к ней сообщение. Теперь я могу сделать что-то вроде этого:

try:
  some_ldap_function(*args,connection=con,**kwargs)
except ldap.INVALID_SYNTAX,e:
  print e

Это даст мне

{'info': 'feeClass: value #0 invalid per syntax', 'desc': 'Invalid syntax'}

Теперь это диктрионник, и, насколько я понимаю, я должен быть в состоянии сделать что-то вроде

print e['info']

что не так. Вместо этого я получаю Исключение TypeError: индекс последовательности должен быть целым числом, а не 'str'

Что здесь не так?

Ответы [ 2 ]

2 голосов
/ 09 декабря 2012

документы утверждают, что

Исключения сопровождаются словарем, возможно, содержащим строковое значение для ключа desc (дающее английское описание класса ошибки) и / или строковое значение для ключаinfo (с указанием строки, содержащей больше информации, которую мог отправить сервер).

, поэтому полученный код должен выглядеть следующим образом:

try:
    ...
except LDAPError, e:
    if 'desc' in e.message:
        print "LDAP error: %s" % e.message['desc']
    else: 
        print e
1 голос
/ 25 ноября 2010

Вы неверно истолковываете то, что видите

py> e=ldap.INVALID_SYNTAX("{'info': 'feeClass: value #0 invalid per syntax', 'desc': 'Invalid syntax'}")
py> print e
{'info': 'feeClass: value #0 invalid per syntax', 'desc': 'Invalid syntax'}
py> e.args
("{'info': 'feeClass: value #0 invalid per syntax', 'desc': 'Invalid syntax'}",)

Таким образом, при печати e печатается e.args [0], который является строкой. Эта строка выглядит как повтор словаря, но это не значит, что e - это словарь (на самом деле, должно быть ясно, что e не может быть словарем, поскольку оно должно быть исключением).

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