2017-05-12 20 views
1

我想提出併除了與消息的自定義異常,但消息字符串打印爲字符的元組。 我的錯誤類:Python異常處理 - 異常引發的字符串消息,例如字符列表除外

class myError(Exception): 
    def __init__(self, arg): 
     self.args = arg 

並嘗試加註,除部分:

try: 
    raise myError('some message.') 
except myError, e: 
    print e.args 

這時候適當提高,印刷:`

('s', 'o', 'm', 'e', ' ', 'm', 'e', 's', 's', 'a', 'g', 'e', '.', ' ') 

當然,我想「一些消息。 」。到底是怎麼回事?

回答

0

您的問題是args已經是Exception成員,它被定義爲:

ARGS
賦予異常構造函數的參數元組

所以你給一個元組賦予一個迭代(一個字符串是一個可迭代的字符)並以一個字符組結束。

如何解決:

  1. 只使用args從異常:

    class myError(Exception): 
        pass 
    
    try: 
        raise myError('message') 
    except myError as e: 
        print(e.args[0]) 
    
  2. 使用一個新的成員的名字:

    class myError(Exception): 
        def __init__(self, arg): 
         self.msg = arg 
    
    try: 
        raise myError('message',) 
    except myError as e: 
        print(e.msg) 
    
0

你不需要在你的異常申報__init__

>>> class myError(Exception): 
...  pass 

>>> raise myError('some message.') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
__main__.myError: some message. 
+0

確定。我刪除__init __(),但保持try-except子句相同。它打印('一些消息')。兩個問題 - (1)爲什麼我仍然可以調用e.args,如果類中沒有任何東西是'args'的話。 (2)我檢查了e.args的類型,它表示元組,而不是字符串。刪除__init __() – xpipie

+0

無法解決的問題您可以簡單地打印'str(e)'而不是'e.args' – Chaker