工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> Python

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

  1. Python のキーワードと識別子
  2. Python ステートメント、インデント、およびコメント
  3. Python 変数、定数、およびリテラル
  4. Python の型変換と型キャスト
  5. Python の入力、出力、およびインポート
  6. Python pass ステートメント
  7. Python グローバル変数、ローカル変数、および非ローカル変数
  8. Python ディレクトリおよびファイル管理
  9. try、except、finally ステートメントを使用した Python 例外処理
  10. PythonとRaspberryPiの温度センサー
  11. C++ 例外処理:Try、Catch、throw の例