2010-11-25 85 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