2017-01-11 6 views
12

今、私はexcept Exception:句で例外をキャッチし、print(exception)を実行します。結果は常に<class 'Exception'>を出力するため、情報は提供されません。私はこれがPython 2で動作するのを知っていましたが、python3でどうすればいいですか?Python 3で例外をプリントする方法は?

+1

、名前にバインドされているものを正確に 'exception'?この動作が現れる箇所のスニペットを投稿してください。ほとんどの場合、名前 'exception'が初期化されている部分があります。 –

答えて

29

を試してみてください。 shown in the Python 3 tutorialとおり

def fails(): 
    x = 1/0 

try: 
    fails() 
except Exception as ex: 
    print(ex) 

は簡単な説明を与えるために、asは、特定の化合物文で使用される擬似割り当てキーワードが変数に先行する文を割り当てるかエイリアスすることです。

この場合、asは、キャッチされた例外を変数に割り当てて、すぐに処理する必要がなく、後で格納して使用する例外に関する情報を許可します。 (これは、Python 3 Language Reference: The try Statementで詳細に説明されている。)


asを使用して他の複合ステートメントがwithステートメントである:ここ

@contextmanager 
def opening(filename): 
    f = open(filename) 
    try: 
     yield f 
    finally: 
     f.close() 

with opening(filename) as f: 
    # ...read data from f... 

withステートメントは、ブロックの実行をラップするために使用されています方法は、context managersによって定義される。これは、きちんとしたジェネレータパッケージ内の拡張try...except...finally文のように機能し、as文は、コンテキストマネージャからのジェネレータで生成された結果を、拡張使用の変数に割り当てます。 (これはPython 3 Language Reference: The with Statementで詳細に説明されている。)、モジュールのインポート時に最後に、as(通常短い)名前別にモジュールをエイリアスするために使用することができる


import foo.bar.baz as fbb 

このPython 3 Language Reference: The import Statementに詳しく説明されている。

7

は、私はあなたが変数にExceptionを割り当てる必要があることを推測している

except Exception as e: 
    print(e) 
8

これらは、Python 2からの変更です:これは意味がありません

try: 
    1/0 
except Exception as e: # (as opposed to except Exception, e:) 
         #^that will just look for two classes, Exception and e 
    print(e) # for the repr 
    print(str(e)) # for just the message 
    print(e.args) # the arguments that the exception has been called with. 
        # the first one is usually the message. 
関連する問題