Pythonのtry except文とは?基本構文からfinally・else句まで徹底解説
Pythonのtry…except文は、例外(エラー)を捕捉(キャッチ)するための構文です。「try」ブロック内に書かれたコードにエラーがないかをテストし、エラーが検出された場合には「except」ブロックの中身が実行されます。
Pythonでtryとexceptを使う方法
プログラム全体を実行する前に、特定のコードブロックが正しく動作するかどうかを確認したい場面はよくあります。例えば、大量の新しいコードを書いた場合、残りのプログラムを実行する前に、その部分が問題なく動くことを確認したいはずです。
try…exceptブロックを使えば、コードをテストし、例外が発生した場合に適切に処理できます。さらに、finally句やelse句を追加することで、try…exceptブロックの実行結果に応じて追加のコードを実行することも可能です。
この記事では、Pythonにおけるtryとexceptの使い方を解説します。具体的なサンプルコードも紹介するので、すぐに実践で活用できるでしょう。
おさらい:Pythonのエラーと例外の種類
Pythonで遭遇する可能性のあるエラーには、大きく分けて「構文エラー」と「例外」の2種類があります。
構文エラーは、誤った構文を使ったときに発生するエラーです。例えば、while Trueループの末尾にコロン(:)を付け忘れると、プログラムはエラーを報告します。構文エラーが発生すると、ファイル名や行番号、エラーが存在する可能性のある箇所を示すキャレット(^)が表示されます。
一方、例外は、構文は正しいのにコードの実行中に問題が発生するエラーです。例外にも多くの種類がありますが、特によく見かけるものは以下の通りです。
- ArithmeticError(算術演算に関するエラー)
- ImportError(モジュールのインポートに失敗した際のエラー)
- ZeroDivisionError(ゼロ除算のエラー)
- NameError(未定義の変数や名前を参照した際のエラー)
- TypeError(不適切な型の操作を行った際のエラー)
Pythonのtry…except文の基本
Pythonのtry…except文は、「try」ブロック内のコードを実行します。このコードが正常に実行できなかった場合、プログラムはエラーが発生した行で停止し、代わりに「except」ブロックのコードが実行されます。
つまり、tryブロックでコードのエラーをテストし、exceptブロックでユーザーが定義した応答によってエラーを処理できるのです。
try…exceptブロックの基本構文は以下の通りです。
try:
# テストしたいコード
except:
# エラー発生時に実行するコード
try文やexcept文の中には、任意の有効なPythonコードを記述できます。
try…exceptのサンプルコード
実際にtry…exceptブロックの使用例を見てみましょう。
try:
print(ourVariable)
except:
print('Error returned')
上記の例では、変数ourVariableを宣言していないにもかかわらず、tryブロック内でその変数を使用しようとしています。
もしtry…exceptブロックがなければ、プログラムはエラーメッセージを返して異常終了します。デバッグ中にエラーメッセージを見るのは問題ありませんが、一般ユーザーがエラーメッセージを目にすると混乱してしまうかもしれません。
try…exceptブロックがあることで、コードはエラーに遭遇したときに何をすべきかを把握しています。
このコードの実行結果は以下の通りです。
Error returned
try…exceptブロックを使うことで、例外を適切に処理できます。また、Pythonのloggingモジュールのようなパッケージを使って、発生した例外をログファイルに保存する機能を実装するのもおすすめです。そうすれば、発生した例外を後から追跡・確認できます。
複数のexcept文で複数の例外を捕捉する
except文は、エラーの種類ごとに複数記述することができます。これは、起こりうる例外が複数あり、どれが発生するかわからない場合に特に便利です。
以下は、NameErrorを捕捉するtry…exceptブロックの例です。
try:
print(ourVariable)
except NameError:
print('ourVariable is not defined')
except:
print('Error returned')
この場合、コードはNameErrorを返すため、「ourVariable is not defined」というメッセージが出力されます。テストするコードに応じて、ZeroDivisionErrorやOSErrorなど、他の例外を追加することもできます。
例えば、ファイルを開く処理ではIOErrorやFileNotFoundErrorをチェックするとよいでしょう。複数の例外を事前にチェックしておけば、参照先のファイルを開く際にエラーが発生しても、プログラムは処理を続行できます。
finally句:エラーの有無にかかわらず実行されるコード
では、エラーが発生した場合でも、正常に完了した場合でも、必ずメッセージを表示したい場合はどうすればよいのでしょうか。そこで登場するのがfinallyブロックです。finally句を定義すると、try…exceptブロックでエラーが発生したかどうかにかかわらず、その中身が必ず実行されます。
finallyブロックは「コードの実行が完了したこと」を示す便利な指標になります。ただし、処理の成功・失敗を区別しないため、else句ほど頻繁には使われません。
以下はその例です。
try:
print(ourVariable)
except:
print('ourVariable is not defined')
finally:
print('Code has been run.')
このプログラムの実行結果は以下の通りです。
ourVariable is not defined Code has been run.
exceptブロック内のコードが実行されたのは、コードに例外(ourVariableが未定義)が見つかったからです。同時に、finally句内のコードも実行されています。これは、コードの実行が完了したためです。
else句:例外が発生しなかった場合に実行されるコード
else句を使うと、例外が一切発生しなかった場合にのみ実行されるコードを定義できます。例えば、「プログラムが正常に実行されました」というメッセージをユーザーに表示するといった使い方が考えられます。
例えば、ゲームのユーザー登録システムを作っているとしましょう。try…except…elseブロックを使えば、ユーザーが選択したユーザー名やメールアドレスが有効かどうかをチェックできます。無効な場合はexcept句が実行され、有効な場合はelseブロックが実行される仕組みです。
以下はその例です。
try:
print('Test')
except:
print('There is a problem.')
else:
print('There are no problems.')
このコードの実行結果は以下の通りです。
There are no problems.
このPythonプログラムでは例外が発生していません。そのため、else文の中のコードが実行され、「問題はない」というメッセージが出力されます。
まとめ
try…exceptブロックを使えば、Pythonコードのデバッグが簡単になります。プログラムはまず「try」ブロック内のコードの実行を試み、失敗した場合は「except」ブロックが実行されます。また、「finally」文のコードは、exceptブロックが実行されたかどうかにかかわらず必ず実行されます。
この記事では、try…exceptブロックの使い方を解説しました。else句やexcept句を活用することで、例外処理を柔軟にカスタマイズできます。
これらのブロックは、既存コードのテスト時にも新規コードの作成時にも役立ちます。プログラムが正しく動作し、エラーを含まないことを保証するために、ぜひ日々の開発に取り入れてください。
-
Pythonインタープリターとは?仕組みと初心者向けオンライン環境を徹底解説
Pythonは学びやすいプログラミング言語として知られています。その理由のひとつが、自分のマシンに正しいバージョンのPythonをインストールしなくても、オンラインで利用できるPythonインタープリターが数多く存在する点です。本記事では、Pythonインタープリターの仕組みについて解説し、初心者にも使いやすい人気のオンラインインタープリターをご紹介します。 Pythonプログラムはどのように実行されるのか? PythonはJavaと同様に、純粋なインタプリタ言語ともコンパイラ言語とも分類できず、両方の性質を併せ持っています。 ここでいう「コンパイル」とは、特定のプラットフォームに依存し
-
Pythonのtry-except入門!例外処理の基本と実践例をわかりやすく解説
はじめに このチュートリアルでは、Pythonにおけるtryとexceptの使い方について学びます。Pythonにはエラーと例外処理という仕組みが用意されており、その中核を担うのがtryキーワードとexceptキーワードです。 Pythonで発生するエラーには、主に次の2種類があります。 構文エラー(Syntax Error): プログラム内のコードをPythonが解釈できない場合に発生するエラーです。 例外エラー(Exception Error): プログラムの実行時に検出されるエラーです。例として、ZeroDivisionErrorやValueErrorなどが挙げられます。 構文エラー