今、except Exception:
節で例外をキャッチし、print(exception)
を実行します。結果は常に<class 'Exception'>
を出力するため、情報を提供しません。これはpython 2で機能することを知っていましたが、python3ではどのようにすればよいですか?
Exception
を変数に割り当てる必要があると思います。 Python 3チュートリアルに表示 :
def fails():
x = 1 / 0
try:
fails()
except Exception as ex:
print(ex)
簡単に説明すると、as
は、特定の複合ステートメントで使用される擬似割り当てキーワードであり、先行ステートメントを変数に割り当てたり、別名を付けたりします。
この場合、as
は、キャッチされた例外を変数に割り当て、すぐに処理する必要なく、例外に関する情報を保存して後で使用できるようにします。 (これは Python 3言語リファレンス:try
ステートメント で詳しく説明されています。)
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言語リファレンス:with
ステートメント で詳しく説明されています。)
最後に、モジュールをインポートするときにas
を使用して、モジュールを別の(通常は短い)名前にエイリアスすることができます。
import foo.bar.baz as fbb
これについては Python 3言語リファレンス:import
ステートメント で詳しく説明されています。
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
# for the repr
print(repr(e))
# for just the message, or str(e), since print calls str under the hood
print(e)
# the arguments that the exception has been called with.
# the first one is usually the message. (OSError is different, though)
print(e.args)
あなたは標準的なライブラリモジュールを見ることができます traceback より手の込んだものについて。
試して
except Exception as e:
print(e)