Pythonの例外はオブジェクト?例外オブジェクトの正体と構成要素をわかりやすく解説
結論:「err」は例外オブジェクトです
はい、提示されたコードにおける「err」は例外オブジェクトです。
Pythonではすべてがオブジェクト
Pythonでは、すべてがオブジェクトとして扱われます。そして、すべてのオブジェクトには属性(アトリビュート)とメソッドが備わっています。そのため、リストや関数、タプルなどとまったく同じように、例外もまたオブジェクトなのです。つまり、例外にも他のオブジェクトと同様に属性が存在し、それらを設定したり参照したりすることができます。
例外のほとんどは、基底クラスであるExceptionクラスのサブクラスです。たとえば、変数eが例外オブジェクトである場合、e.argsやe.messageなどがその属性に該当します。
例外を構成する3つの要素
現在のPython実装では、例外は次の3つの部分から構成されます。
- 型(type):発生した例外の種類(例:ValueError)
- 値(value):例外に関連付けられた値やエラーメッセージ
- トレースバック(traceback):例外が発生した箇所に関する情報
sysモジュールは、現在の例外オブジェクトをexc_type、exc_value、exc_tracebackという3つの変数で表します。
sys.exc_info()による例外情報の取得
sys.exc_info()関数を呼び出すと、上記の3つの属性をまとめたタプルが返されます。また、raise文には、この3つの部分を受け取る3引数の形式も用意されています。
実行結果の例
提示されたコードを実行すると、次のような出力が得られます。
(<type 'exceptions.ValueError'>, ValueError('could not convert string to int: Godzilla!',), <traceback object at 0x0000000002E33748>)
-
Pythonで例外を発生させる方法!raise文の基本と実例をわかりやすく解説
Pythonで例外を発生させるには? Pythonでは、raiseキーワードを使うことで、意図的に例外(Exception)を発生させることができます。バリデーションエラーの通知や、異常な状態の検出など、プログラムの制御フローを明確にしたい場面で非常に役立ちます。 raise文の基本構文 raise文の基本的な書式は以下のとおりです。 raise [Exception [, args [, traceback]]] 各要素の意味は次のとおりです。 Exception:発生させる例外の名前(例:ValueError、TypeError など) args(省略可能):例外に渡す引数の値。エラー
-
Pythonで関数が例外を発生させることをテストする方法(unittestのassertRaises活用)
Pythonのユニットテストでは、「関数が期待どおりの例外を投げない場合にのみ失敗する」というテストを書くことができます。これは、型安全性やエラーハンドリングの正しさを検証するうえで非常に重要な手法です。ここでは、Python標準ライブラリの unittest を使って、関数が例外をスローすることを確認する方法を解説します。例外発生をテストするサンプルコードたとえば、整数と文字列を足し合わせると TypeError が発生することを確認するコードは、以下のように書けます。Pythonシェルにそのまま貼り付けて実行できます。import unittest class MyTestCase(uni