try、except、finally ステートメントを使用した Python 例外処理
try、except、finally ステートメントを使用した Python 例外処理
このチュートリアルでは、例を使用して、try、except、および finally ステートメントを使用して、Python プログラムで例外を処理する方法を学習します。
ビデオ:Python 例外処理 (try..except..finally)
Python の例外
Python には組み込みの例外が多数あり、プログラムでエラーが発生した場合 (プログラムで何か問題が発生した場合) に発生します。
これらの例外が発生すると、Python インタープリターは現在のプロセスを停止し、処理されるまで呼び出しプロセスに渡します。処理しないと、プログラムがクラッシュします。
たとえば、関数 A
を持つプログラムを考えてみましょう 関数 B
を呼び出す 、次に関数 C
を呼び出します .関数 C
で例外が発生した場合 しかし、C
では処理されません 、例外は B
に渡されます そして A
へ .
処理されない場合、エラー メッセージが表示され、プログラムが予期せず突然停止します。
Python での例外のキャッチ
Python では、try
を使用して例外を処理できます。
例外を発生させる可能性のある重要な操作は、try
内に配置されます。 句。例外を処理するコードは except
に記述されています
したがって、例外をキャッチしたら、実行する操作を選択できます。以下は簡単な例です。
# import module sys to get the type of exception
import sys
randomList = ['a', 0, 2]
for entry in randomList:
try:
print("The entry is", entry)
r = 1/int(entry)
break
except:
print("Oops!", sys.exc_info()[0], "occurred.")
print("Next entry.")
print()
print("The reciprocal of", entry, "is", r)
出力
The entry is a Oops! <class 'ValueError'> occurred. Next entry. The entry is 0 Oops! <class 'ZeroDivisionError'> occured. Next entry. The entry is 2 The reciprocal of 2 is 0.5
このプログラムでは、randomList の値をループします。 リスト。前述のように、例外が発生する可能性のある部分は try
内に配置されます。 ブロックします。
例外が発生しない場合、except
ブロックはスキップされ、通常のフローが続行されます (最後の値について)。ただし、例外が発生した場合は、except
によってキャッチされます ブロック (最初と 2 番目の値)。
ここでは、exc_info()
を使用して例外の名前を出力します。 sys
内の関数 モジュール。 a
であることがわかります ValueError
を引き起こす と 0
ZeroDivisionError
を引き起こす .
Python のすべての例外はベース Exception
から継承するため クラスでは、上記のタスクを次の方法で実行することもできます:
# import module sys to get the type of exception
import sys
randomList = ['a', 0, 2]
for entry in randomList:
try:
print("The entry is", entry)
r = 1/int(entry)
break
except Exception as e:
print("Oops!", e.__class__, "occurred.")
print("Next entry.")
print()
print("The reciprocal of", entry, "is", r)
このプログラムの出力は、上記のプログラムと同じです。
Python で特定の例外をキャッチする
上記の例では、except
で特定の例外について言及していません。
これは、すべての例外をキャッチし、すべてのケースを同じ方法で処理するため、適切なプログラミング方法ではありません。 except
の例外を指定できます 句をキャッチする必要があります。
try
節は except
の任意の数を持つことができます ただし、例外が発生した場合に実行されるのは 1 つのみです。
値のタプルを使用して、except 句で複数の例外を指定できます。以下は疑似コードの例です。
try:
# do something
pass
except ValueError:
# handle ValueError exception
pass
except (TypeError, ZeroDivisionError):
# handle multiple exceptions
# TypeError and ZeroDivisionError
pass
except:
# handle all other exceptions
pass
Python で例外を発生させる
Python プログラミングでは、実行時にエラーが発生すると例外が発生します。 raise
を使用して手動で例外を発生させることもできます キーワード。
オプションで例外に値を渡して、その例外が発生した理由を明確にすることができます。
>>> raise KeyboardInterrupt
Traceback (most recent call last):
...
KeyboardInterrupt
>>> raise MemoryError("This is an argument")
Traceback (most recent call last):
...
MemoryError: This is an argument
>>> try:
... a = int(input("Enter a positive integer: "))
... if a <= 0:
... raise ValueError("That is not a positive number!")
... except ValueError as ve:
... print(ve)
...
Enter a positive integer: -2
That is not a positive number!
else 句を使用した Python の試行
コードブロックが try
内にある場合、特定のコードブロックを実行したい場合があります。 エラーなしで実行されました。このような場合、オプションの else
を使用できます try
を含むキーワード
注意 :else 句の例外は、先行する except 句では処理されません。
例を見てみましょう:
# program to print the reciprocal of even numbers
try:
num = int(input("Enter a number: "))
assert num % 2 == 0
except:
print("Not an even number!")
else:
reciprocal = 1/num
print(reciprocal)
出力
奇数を渡す場合:
Enter a number: 1 Not an even number!
偶数を渡すと、逆数が計算されて表示されます。
Enter a number: 4 0.25
ただし、0 を渡すと、ZeroDivisionError
が返されます。 else
内のコード ブロックとして 前の except
では処理されません .
Enter a number: 0 Traceback (most recent call last): File "<string>", line 7, in <module> reciprocal = 1/num ZeroDivisionError: division by zero
Python の試行...最終的に
try
Python のステートメントは、オプションの finally
を持つことができます 句。この句は何があっても実行され、通常は外部リソースを解放するために使用されます。
たとえば、ネットワークを介してリモート データ センターに接続したり、ファイルやグラフィカル ユーザー インターフェイス (GUI) を操作したりする場合があります。
これらすべての状況において、プログラムが正常に実行されたかどうかにかかわらず、プログラムが停止する前にリソースをクリーンアップする必要があります。これらのアクション (ファイルのクローズ、GUI、またはネットワークからの切断) は、finally
で実行されます。 実行を保証する条項。
これを説明するためのファイル操作の例を次に示します。
try:
f = open("test.txt",encoding = 'utf-8')
# perform file operations
finally:
f.close()
このタイプの構成により、プログラムの実行中に例外が発生した場合でも、ファイルが確実に閉じられます。
Python