开发者

python ldap.LDAPError object rejects access to dictionary

开发者 https://www.devze.com 2023-01-27 03:43 出处:网络
using python 2.6.5 and python-ldap 2.3.10, I have the following problem: Under certain circumstances my application raises an ldap.LDAPError, or to be more specific, an ldap.INVALID_SYNTAX error. I c

using python 2.6.5 and python-ldap 2.3.10, I have the following problem: Under certain circumstances my application raises an ldap.LDAPError, or to be more specific, an ldap.INVALID_SYNTAX error. I catch this error and would like to process the message attached to it. Now I can do something like this:

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

This will give me

{'info': 'feeClass: value #0 invalid per syntax', 'desc': 'Invalid syntax'开发者_运维知识库}

Now this is a dictrionary, and as far as I understand, I should be able to do something like

print e['info']

which is not the case. Instead I get a TypeError Exception: sequence index must be integer, not 'str'

What is wrong here?


docs state that

The exceptions are accompanied by a dictionary possibly containing an string value for the key desc (giving an English description of the error class) and/or a string value for the key info (giving a string containing more information that the server may have sent).

so resulting code should look like this:

try:
    ...
except LDAPError, e:
    if 'desc' in e.message:
        print "LDAP error: %s" % e.message['desc']
    else: 
        print e


You are misinterpreting what you are seeing

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'}",)

So printing e prints e.args[0], which is a string. That string looks like the repr of a dictionary, but that doesn't mean that e is a dictionary (in fact, it should be clear that e can't be a dictionary, since it must be an exception).

0

精彩评论

暂无评论...
验证码 换一张
取 消