Python 4-2 での例外処理

「Python 4-1 の例外処理」で述べたように、すべての例外は、Except を使用してキャッチできます。実際、プログラムの実行中に例外が発生する理由は数多くあります。たとえば、添え字が範囲外である、除数が 0 である、変数が未定義であるなどです。

1 例外ステートメントと特定の例外タイプ

ステートメントが指定された例外のみをキャッチすることを示すために、Except ステートメントの後に特定の例外タイプを追加できます。コードは次のとおりです。

a, b = input('请输入被除数和除数:').split()
try:
    print(int(a)/int(b))
except ZeroDivisionError:
    print('除数不能为0。')

このうち、Except ステートメントは ZeroDivisionError 例外のみをキャプチャし、除数が 0 の場合、Python はこの例外をスローします。ZeroDivisionError 例外を処理するプログラムの入力と出力を図 1 に示します。

図 1 ZeroDivisionError 例外の処理

図 1 からわかるように、プログラムの実行後に入力される値は「1 0」です。つまり、a の値は「1」、b の値は「0」です。

int(b) の値は 0 であり、Python は ZeroDivisionError 例外をスローします。この例外は作成したコードによって処理され、「除数を 0 にすることはできません」と表示されます。

入力が「1 a」の場合、bの値は「a」ですが、このときint(b)では整数型に変換できず、ValueError例外がスローされます。ただし、このコードは ValueError 例外をキャッチしないため、例外は Python によって処理され、赤色のエラー メッセージが表示されます。コードは図 2 に示されています。

図 2 ValueError 例外処理

2 複数の例外を同時に処理する

「1 例外文と特定の例外タイプ」で述べたコード内で複数の例外が発生する可能性がある場合、複数の例外を使用して例外をキャッチすることができます。

a, b = input('请输入被除数和除数:').split()
try:
    print(int(a)/int(b))
except ZeroDivisionError:
    print('除数不能为0。')
except ValueError:
    print('输入的不是数字。')

「1 a」を入力すると、コードが ValueError 例外をキャプチャするため、図 3 に示すように、「入力は数値ではありません」と表示されます。

図 3 複数の例外をキャッチする

おすすめ

転載: blog.csdn.net/hou09tian/article/details/132775308