2010-11-25 132 views
2

使用python 2.6.5和python-ldap 2.3.10,我有以下问题: 在某些情况下,我的应用程序引发了ldap.LDAPError,或者更具体一些ldap.INVALID_SYNTAX错误。我发现了这个错误,并想处理附加到它的消息。 现在我可以做这样的事情:python ldap.LDAPError对象拒绝访问字典

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'} 

现在,这是一个dictrionary,而据我了解,我应该能够做到像

print e['info'] 

不是这种情况。相反,我得到一个 TypeError异常:序列索引必须是整数,而不是'str'

这里有什么问题?

回答

1

你误解了你所看到的

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.args [0],这是一个字符串。该字符串看起来像字典的repr,但这并不意味着e是一个字典(事实上,它应该清楚,e不能是字典,因为它必须是一个例外)。

+2

酷。所以,为了得到我想要的,我需要做的只是打印e.args [0] ['info'] – Isaac 2010-11-25 15:57:22

2

文档指出

例外都伴随着可能含有该键递减为密钥的 字符串值(给出 错误类的英语描述)和/或一个字符串值的字典info(给出一个包含服务器可能发送的更多信息的字符串 )。

所以产生的代码应该是这样的:

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