2017-05-12 8 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', '.', ' ') 

は、私は「いくつかのメッセージを望んでいました。 '何が起こっている?

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

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

答えて

0

あなたの問題はargsはすでにExceptionのメンバーであることであり、それは以下のように定義される:

0

あなたはあなたの例外で__init__を宣言する必要はありません

引数
例外コンストラクタに渡される引数のタプル

したがって、繰り返し可能なタプル(文字の繰り返し可能な文字列)を割り当て、文字のタプルで終了します。

  1. をちょうどExceptionから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

[OK]を修正する方法

。私は__init __()を削除しましたが、try-except句を同じにしました。それは印刷します( '何らかのメッセージ。')。 2つの質問 - (1)「args」としてクラスに何もない場合、なぜe.argsを呼び出すことができますか? (2)文字列ではなくタプルを表すe.argsの型を調べました。 __initを削除しても問題が解決しない__() – xpipie

+0

'e.args'の代わりに' str(e) 'を単に印字することもできます – Chaker

関連する問題