Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonの例外処理とは?try・except・finallyの基本をわかりやすく解説

例外(Exception)とは、プログラムの実行中に発生し、命令の通常の流れを妨げるイベントのことです。一般的に、Pythonスクリプトが対処できない状況に遭遇すると、例外を発生(raise)させます。例外は、エラーを表すPythonオブジェクトです。

Pythonスクリプトが例外を発生させた場合、その場で例外を処理する必要があります。適切に処理しなければ、スクリプトは終了してしまいます。

例外の処理方法

例外を発生させる可能性のある怪しいコードがある場合は、そのコードを try: ブロックの中に置くことで、プログラムを防御できます。tryブロックの後には except: 文を続け、さらにその後に、問題をできるだけ丁寧に処理するためのコードブロックを記述します。

基本構文

try...except...else ブロックのシンプルな構文は以下のとおりです。

try:
    ここで操作を行う
    ......................
except ExceptionI:
    ExceptionIが発生した場合、このブロックを実行する
except ExceptionII:
    ExceptionIIが発生した場合、このブロックを実行する
    ......................
else:
    例外が発生しなかった場合、このブロックを実行する

上記の構文に関する重要なポイントは次のとおりです。

  • 1つの try 文に対して、複数の except 文を指定できます。tryブロック内に異なる種類の例外を投げる可能性のある文が含まれている場合に便利です。
  • あらゆる例外を処理する汎用の except 句を指定することもできます。
  • except 句の後には else 句を含めることができます。elseブロック内のコードは、tryブロック内のコードが例外を発生させなかった場合に実行されます。
  • elseブロックは、tryブロックによる保護を必要としないコードを置くのに適した場所です。

例:正常に処理されるケース

次の例では、ファイルを開いて内容を書き込み、問題なく正常に終了します。

#!/usr/bin/python
try:
    fh = open("testfile", "w")
    fh.write("This is my test file for exception handling!!")
except IOError:
    print "Error: can\'t find file or read data"
else:
    print "Written content in the file successfully"
    fh.close()

出力結果

このコードを実行すると、次のような結果が出力されます。

Written content in the file successfully

例:例外が発生するケース

次の例では、書き込み権限のないファイルを開こうとしているため、例外が発生します。

#!/usr/bin/python
try:
    fh = open("testfile", "r")
    fh.write("This is my test file for exception handling!!")
except IOError:
    print "Error: can\'t find file or read data"
else:
    print "Written content in the file successfully"

出力結果

このコードを実行すると、次のような結果が出力されます。

Error: can't find file or read data

例外名を指定しないexcept句

except 文は、例外名を指定せずに次のように使用することもできます。

try:
    ここで操作を行う
    ......................
except:
    何らかの例外が発生した場合、このブロックを実行する
    ......................
else:
    例外が発生しなかった場合、このブロックを実行する

この形式の try-except 文は、発生したすべての例外をキャッチします。ただし、すべての例外を捕捉してしまうため、問題の根本原因を特定できなくなる可能性があり、良いプログラミング手法とは考えられていません。可能な限り具体的な例外を指定することが推奨されます。

複数の例外を扱うexcept句

同じ except 文で複数の例外を処理することもできます。次のように記述します。

try:
    ここで操作を行う
    ......................
except(Exception1[, Exception2[,...ExceptionN]]]):
    指定された例外リストの中のいずれかの例外が発生した場合、
    このブロックを実行する
    ......................
else:
    例外が発生しなかった場合、このブロックを実行する

try-finally句

finally: ブロックは try: ブロックと組み合わせて使用できます。finallyブロックは、tryブロックで例外が発生したかどうかにかかわらず、必ず実行したいコードを記述する場所です。try-finally文の構文は次のとおりです。

try:
    ここで操作を行う
    ......................
    例外が発生すると、ここはスキップされる可能性がある
finally:
    これは常に実行される
    ......................

なお、finally句と同時に else 句を使用することはできません。

#!/usr/bin/python
try:
    fh = open("testfile", "w")
    fh.write("This is my test file for exception handling!!")
finally:
    print "Error: can\'t find file or read data"

出力結果

書き込みモードでファイルを開く権限がない場合、次のような結果が出力されます。

Error: can't find file or read data

同じ例をよりきれいに記述すると、次のようになります。

例:ネストしたtry-finally

#!/usr/bin/python
try:
    fh = open("testfile", "w")
    try:
        fh.write("This is my test file for exception handling!!")
    finally:
        print "Going to close the file"
        fh.close()
except IOError:
    print "Error: can\'t find file or read data"

tryブロック内で例外が発生すると、実行は直ちに finally ブロックへ移ります。finallyブロック内のすべての文が実行された後、例外は再度発生し、上位階層の try-except 文に except 文が存在すれば、そこで処理されます。

  1. Pythonのosモジュール入門:ディレクトリ操作とファイル操作の基本をマスターしよう

    はじめにPythonのosモジュールは、開発者が実行中のオペレーティングシステム(OS)とやり取りするためのさまざまな関数を提供する標準ライブラリです。この記事では、その中でも特によく使われる以下の操作について解説します。ディレクトリ(フォルダ)の作成・削除ディレクトリ名の変更ファイル操作の基本それでは、早速始めていきましょう。準備:モジュールのインポートosモジュールはPythonのインストール時に同梱されているため、PIPなどで別途インストールする必要はありません。各種メソッドや関数を使うには、モジュールをインポートするだけです。import osこれで、osモジュールが提供するさまざまな

  2. PythonのCGIとは?仕組みとサーバー設定方法をわかりやすく解説

    CGI(Common Gateway Interface:共通ゲートウェイインターフェース)は、HTTPサーバーなどの情報サーバーと外部のゲートウェイプログラムがやり取りするための標準規格です。現在のバージョンはCGI/1.1であり、CGI/1.2が策定中です。Webブラウジングの流れCGIの概念を理解するために、ハイパーリンクをクリックして特定のWebページやURLを閲覧するときに何が起こるのかを見てみましょう。ブラウザがHTTP Webサーバーに接続し、URL(つまりファイル名)を要求します。WebサーバーはURLを解析してファイル名を探します。該当するファイルが見つかればそれをブラウザへ