検索

キーワード


目次

Pythonにおける例外処理について【初心者向け解説記事】

  • 公開日:2023-07-16 17:01:02
  • 最終更新日:2023-07-16 17:01:55
Pythonにおける例外処理について【初心者向け解説記事】

Workteria(ワークテリア)では難易度の高いものから低いものまで、スキルや経験に合わせた案件を多数揃えています。会員登録は無料ですので、ぜひ会員登録してご希望の案件を探してみてください!

フリーランス/正社員のエンジニアとして活躍するには、ご自身のスキルや経験に合わせた仕事を選ぶことが大切です。ご希望の案件がみつからない場合はお気軽にお問い合わせください!ユーザ満足度の高いキャリアコンサルタントが在籍していますので、希望条件や悩み事などなんでもご相談ください。ご希望にピッタリの案件をご紹介させていただきます。

Pythonの例外処理とは?

プログラムの実行中に発生する予期せぬエラーを例外といいます。これらの例外を適切に処理することで、プログラムの安定性と信頼性を向上させることができます。これがPythonの例外処理の目的です。


例外処理の基本

Pythonでは、例外処理は主にtry-except文を使用して行います。


try-except文の基本形

基本的な形式は以下の通りです。

try:
    # 例外が発生する可能性があるコード
except ExceptionType:
    # 例外が発生した場合の処理

ここで、ExceptionTypeには捕捉したい例外の型を指定します。


例外の種類とそれぞれの発生状況

Pythonには様々な種類の例外が存在します。よく使用される例外とそれぞれの発生状況について説明します。また、Pythonには他にも多くの例外があります。


 TypeError

 異なる型間で不適切な操作が行われたときに発生します。例えば、文字列に対して数値のような操作を試みた場合などです。 

def add_numbers(a, b):
    return a + b

add_numbers(5, "10")  # TypeErrorが発生

このコードは、整数と文字列を加算しようとしているため、TypeErrorが発生します。


ValueError

引数が適切な型であるにもかかわらず、不適切な値であるときに発生します。例えば、整数を期待する関数に文字列を渡した場合などです。

def square_root(n):
    return n ** 0.5  # nが負の数でないことを前提

square_root(-1)  # ValueErrorが発生

このコードは、平方根を求める際に負の値が引数として渡されています。負の数の平方根を計算しようとすると、Pythonではライブラリなしでは虚数を扱えないために、ValueErrorが発生します。


IndexError

シーケンス(リストやタプルなど)の範囲外のインデックスが指定されたときに発生します。

my_list = [1, 2, 3, 4, 5]

print(my_list[10])  # IndexErrorが発生します。

このコードは、範囲外のインデックスにアクセスしようとしているため、IndexErrorが発生します。リストmy_listは5つの要素しか持っていませんが、インデックス10の要素にアクセスしようとしています。


複数の例外を処理する

複数の例外を別々に処理するには、以下のように記述します。

try:
    # 例外が発生する可能性があるコード
except ExceptionType1:
    # 例外1が発生した場合の処理
except ExceptionType2:
    # 例外2が発生した場合の処理

例えば、リストから範囲外のインデックスにアクセスするコードがあるとします。この場合、`IndexError`が発生します。しかし、もしリストではなく文字列が渡された場合には`TypeError`が発生します。これらの例外をそれぞれ適切に処理するには次のようにします。

try:
    # リストから範囲外のインデックスにアクセスするコード
except IndexError:
    # IndexErrorが発生した場合の処理
except TypeError:
    # TypeErrorが発生した場合の処理


else節とfinally節の利用

else節tryブロックが例外を引き起こさなかったときに実行されfinally節例外の発生に関係なく最後に必ず実行されます。

try:
    # 例外が発生する可能性があるコード
except ExceptionType:
    # 例外が発生した場合の処理
else:
    # 例外が発生しなかった場合の処理
finally:
    # 最後に必ず実行される処理


例外を発生させる: raise

raise文を使用すると、手動で例外を発生させることができます。これは通常、特定の条件が満たされなかったときにプログラムを強制的に停止させるために使用されます。

x = 10
if x > 5:
    raise Exception('x should not exceed 5. The value of x was: {}'.format(x))


例外処理のベストプラクティス

例外処理を行う際には、以下のような良い習慣を心掛けると良いでしょう。


1. 具体的なエラーメッセージを提供する

プログラムが不具合を起こしたとき、ユーザーまたは開発者がそれを理解し、修正するためには、具体的なエラーメッセージが必要です。これは、エラーが発生した状況、エラーの種類、そして可能であれば修正のための提案を含むべきです。「エラーが発生しました」とだけ表示するのではなく、「FileNotFoundError: ファイル’myfile.txt'が見つかりませんでした。」という具体的なエラーメッセージの方が役立ちます。後者の場合、問題が何であるかとその解決方法が明確に示されています。


2. 不必要に例外を捕捉しない

コードの実行中に何が起こるかは常に予測できるものではありません。そのため、例外処理は不可欠です。しかし、不必要に広範囲の例外を捕捉すると、エラーの種類を特定しにくくなり、実際の問題点を絞り込めなくなる可能性があります。可能な限り具体的な例外を指定することで、必要な例外だけを捕捉し、他の重要なエラーが見逃されるのを防ぐことができます。


 3. 処理の流れを明確にする

try-except文はコードの制御フローを複雑にする可能性があるため、これを使用するときは処理の流れが明確であることを心掛けるべきです。具体的には、tryブロック内にはエラーを起こす可能性のあるコードだけを含め、exceptブロックでは特定のエラーを捕捉して適切に処理するべきです。このようにすることで、コードの可読性と保守性が向上します。また、必要以上に長いtryブロックは避け、エラーの可能性がある最小限のコードだけを含めるようにしましょう。


まとめ

例外処理は、エラーに適切に対応することでプログラムの安定性と信頼性を保つための重要な概念です。この記事を通じて、Pythonの例外処理について理解を深め、実際のコーディングに活用していただければ幸いです。


【著者】

ゆうさい

フォワードソフト株式会社のエンジニア。Java、Python、JavaScript、C#などの言語の他、クラウドやネットワーク技術を勉強しています。PythonやVBAを使った自動化で楽をする方法を考えるのが好きです。 最近はジェネレーティブAIの業務利用に関する検証を行っています。 資格を通じて知識を吸収することを心がけており、セキュリティスペシャリスト、データベーススペシャリスト、応用情報技術者、Oracle Certified Java Programmer Gold SE 11、Pythin3 エンジニア認定試験、HTML5プロフェッショナル認定試験レベル2、AWSプラクティショナーなどの情報資格を保有しています。

編集した記事一覧

正社員/フリーランスの方でこのようなお悩みありませんか?

  • 自分に合う案件を定期的に紹介してもらいたい
  • 週2、リモートワークなど自由な働き方をしてみたい
  • 面倒な案件探し・契約周りは任せて仕事に集中したい

そのような方はぜひ、Workteriaサイトをご利用ください!

  • 定期的にご本人に合う高額案件を紹介

  • リモートワークなど自由な働き方ができる案件多数

  • 専属エージェントが契約や請求をトータルサポート