2011-09-24 35 views
2

我有這段代碼:在Python中,如何捕獲剛剛提出的異常?

jabberid = xmpp.protocol.JID(jid = jid) 
    self.client = xmpp.Client(server = jabberid.getDomain(), 
           debug = []) 
    if not self.client.connect(): 
     raise IOError('Cannot connect to Jabber server') 
    else: 
     if not self.client.auth(user = jabberid.getNode(), 
           password = password, 
           resource = jabberid.getResource()): 
      raise IOError('Cannot authenticate on Jabber server') 

它使用xmpppy。由於xmpppy如果無法連接或驗證,不會拋出任何異常,所以我需要自己拋出它們。問題是,我如何捕獲那些拋出的異常,只輸出錯誤消息,而不是完整的回溯,並保持代碼在儘管運行?

編輯
這是建設合適嗎?

def raise_error(): 
    raise IOError('Error ...') 

if not self.client.connect(): 
    try: 
     self.raise_error() 
    except IOError, error: 
     print error 

回答

3

嘗試/除了在Python中的所有例外。這裏有一個例子:

def raise_error(): 
    raise IOError('Error Message') 

print('Before Call.') 

try: 
    raise_error() 
except IOError as error: 
    print(error) 

print('After Call.') 

編輯:

做出更現實的例子:

def connect_to_client(): 
    ... 
    if time_since_client_responded > 5000: 
     raise ClientTimeoutError(client_name+" timed out.") 

... 
try: 
    connect_to_client("server:22") 
except ClientTimeoutError as error: 
    print(error) 
    sys.exit(1) 
+1

這是更好地創建用戶定義的異常爲[Exception類(HTTP:// docs.python.org/tutorial/errors.html)。 – Ben

+0

這是真的,我只是模擬這個答案的問題。 –

+0

@Lattyware請看這個問題的編輯。你是這個意思嗎? –