LoginSignup
0
2

例外処理は、プログラムの実行中に発生する可能性のあるエラーを処理するための重要な機能です。

Python の例外処理の基本的な構造

try:
    # エラーが発生する可能性のあるコード
except:
    # エラーが発生した場合の処理
else:
    # エラーが発生しなかった場合の処理
finally:
    # エラーの有無に関わらず必ず実行される処理

基本的な例外処理

try:
    number = int(input("数字を入力してください: "))
    result = 10 / number
    print(f"10 / {number} = {result}")
except ValueError:
    print("数字以外が入力されました。")
except ZeroDivisionError:
    print("0で割ることはできません。")

ユーザーからの入力を数値に変換し、10をその数で割り当てます。2つの可能性のあるエラーが発生しています。

  • ValueError: 数字以外で注文した場合
  • ZeroDivisionError: 0個購入しました

elseとfinallyの使用

try:
    file = open("example.txt", "r")
    content = file.read()
    print(content)
except FileNotFoundError:
    print("ファイルが見つかりません。")
else:
    print("ファイルの読み込みに成功しました。")
finally:
    file.close()
    print("ファイルを閉じました。")
  • tryブロック: ファイルを開いて読み込みます
  • except: 問題が発生した場合は、エラーが発生します
  • else:エラーが発生して発生しました
  • finally:エラーの有無に関わらず、必ずファイルを閉じます

独自の例外の作成と使用

class NegativeNumberError(Exception):
    pass

def calculate_square_root(number):
    if number < 0:
        raise NegativeNumberError("負の数の平方根は計算できません。")
    return number ** 0.5

try:
    result = calculate_square_root(-4)
    print(f"平方根: {result}")
except NegativeNumberError as e:
    print(f"エラー: {e}")
  • 独自の例外NegativeNumberErrorを定義しています
  • calculate_square_rootで、負の数にこの例外が発生しています
  • try-exceptブロックでこの例外を捕捉し、適切なメッセージを表示しています

これらの例を通じて、Python の例外処理の基本的な使い方が理解できたかと思います。例外処理を制御することで、プログラムの安定性と可読性を決定します。

exceptについて

exceptは、Python の例外処理において、発生したエラーを捕捉処理するために使用されます。以下に、exceptの様々な使用方法と特徴を示します。

基本的な使用方法

try:
    # エラーが発生する可能性のあるコード
except ExceptionType:
    # 特定の種類のエラーが発生した場合の処理

複数の例外の処理

複数の異なる種類の例外を個別に処理することができます。

try:
    number = int(input("数字を入力してください: "))
    result = 10 / number
    print(result)
except ValueError:
    print("数字以外が入力されました。")
except ZeroDivisionError:
    print("0で割ることはできません。")

複数の例外をまとめて処理

複数の例外をまとめて処理したい場合は、タプルを使用してまとめることができます。

try:
    # コード
except (ValueError, ZeroDivisionError):
    print("数値エラーが発生しました。")

エラーメッセージ

エラーの取得が可能です。

try:
    # コード
except Exception as e:
    print(f"エラーが発生しました: {e}")

全ての例外を catch

特定の例外ではなく、全ての例外を catch すること。これは一般的に推奨されます。

try:
    # コード
except:
    print("何らかのエラーが発生しました。")

else と finally との組み合わせ

exceptはelseとfinallyを必要とします。

try:
    # コード
except Exception as e:
    print(f"エラーが発生しました: {e}")
else:
    print("エラーは発生しませんでした。")
finally:
    print("この処理は常に実行されます。")

例外の再発生

捕捉した例外を次に示し、再び発生します。

try:
    # コード
except Exception as e:
    print(f"エラーが発生しました: {e}")
    raise  # 捕捉した例外を再発生させる

カスタム例外の使用

自作の例外クラスを定義し、それをでexcept捕捉することができます。

class MyCustomError(Exception):
    pass

try:
    raise MyCustomError("これは自作の例外です。")
except MyCustomError as e:
    print(f"カスタムエラーが発生しました: {e}")

これらの様々なexcept方法を理解し、適切に使用することで、より堅牢なエラー処理を実現できます。エラーの種類に応じて適切な処理を行うことで、プログラムの信頼性と使いやすさを決定します。

主なエラーについて

Python には多くの組み込み例外があります。ValueError と ZeroDivisionError以外で頻繁に使用される重要な例外の一部を紹介します。

TypeError

型が異常な操作や関数呼び出しを行った場合に使用します。

try:
    result = "42" + 42
except TypeError as e:
    print(f"型エラー: {e}")

IndexError

リストやタプルなどのシーケンスで、存在しないインデックスにアクセスしようとする際に使用します。

try:
    my_list = [1, 2, 3]
    print(my_list[5])
except IndexError as e:
    print(f"インデックスエラー: {e}")

KeyError

存在しないキーでアクセスしようとしています。

try:
    my_dict = {"a": 1, "b": 2}
    print(my_dict["c"])
except KeyError as e:
    print(f"キーエラー: {e}")

FileNotFoundError

ファイルを開いたままでは存在しません。

try:
    with open("non_existent_file.txt", "r") as file:
        content = file.read()
except FileNotFoundError as e:
    print(f"ファイルが見つかりません: {e}")

AttributeError

オブジェクトが持っていない属性やメソッドにアクセスしようとしていますが利用できません。

try:
    number = 42
    number.append(10)  # intオブジェクトにはappendメソッドがない
except AttributeError as e:
    print(f"属性エラー: {e}")

ImportError

モジュールのインポートに失敗した場合に使用します。

try:
    import non_existent_module
except ImportError as e:
    print(f"インポートエラー: {e}")

NameError

定義されていない変数を使用するつもりはありません。

try:
    print(undefined_variable)
except NameError as e:
    print(f"名前エラー: {e}")

RuntimeError

プログラムの実行中に発生する一般的なエラーです。他の例外カテゴリに当てはまらない場合があります。

try:
    raise RuntimeError("何か予期せぬことが起こりました")
except RuntimeError as e:
    print(f"ランタイムエラー: {e}")

OverflowError

数値演算の結果が大きくて表現ができなくなります。

import sys
try:
    result = sys.maxsize + 1
except OverflowError as e:
    print(f"オーバーフローエラー: {e}")

これらの例外は、Python プログラミングで頻繁に遭遇する可能性のあるものです。適切な例外処理により、予期せぬエラーに対して適切に対応し、プログラムの安定性を向上させることができます。

参考) 東京工業大学情報理工学院 Python早見表

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2