2011-07-11 44 views
2

我有一些像下面的代碼,我試圖連接一個不存在的服務器來測試超時。 120秒後,程序退出代碼5.等等,我斷開lan以測試connect_error,並再次以代碼5退出。爲什麼所有異常都被ldap.SERVER_DOWN捕獲?我如何測試其他異常?爲什麼所有異常都被ldap.SERVER_DOWN捕獲?

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) 
+0

什麼是e?我認爲它應該有'as'關鍵字,如果它是異常對象 –

+2

@Darhazer:'as'和','[同義詞](http://docs.python.org/reference/compound_stmts.html#except),但'as'是Python 2.6的新增功能。 –

+0

此外,逗號在Python 3中消失,必須使用'as'。請參閱PEP 3110 http://www.python.org/dev/peps/pep-3110/。 –

回答

1

基於Python的LDAP的來源,它看起來像只是一個NonblockingLDAPObject可引發異常ldap.TIMEOUT。你不應該爲SimpleLDAPObject處理它。

0

要測試BUSY,您可以綁定到正在工作的LDAP服務器,然後不要關閉(取消綁定)連接。當您嘗試再次連接時,服務器應該拋出BUSY錯誤。