今回はエラー処理の解説です、エラーは大別して2種類あります、
・構文エラー
・例外エラー
ですね!
構文エラーはPython言語の文法違反のエラーであり、
実行が不可能なものです、行の最後のコロンを忘れたり、
インデントが正しくない場合に発生してすぐに止まります。
実行時のエラーは例外エラーとよばれ、tryとexceptで構成されて、
エラー発生後処理を制御できます、だからエラーを無くす事もできます。
try: 処理1 処理2 ~ except エラー名: エラー発生時の処理
スクリプトは、入力された数字で割り算を行うというものですが、
エラーをつかまえてエラー処理をおこないます。
エラーは、0割りのエラー、数字以外のエラー、
その他エラーをprint文で表示しています。
つかまえるには、
except ZeroDivisionError
eexcept ValueError
eexcept Exception as e
を使います、最後のException as eの「e」変数にはエラー情報が入っています、
文字列型ではないので注意して下さい。
(文字列型にするには、str(e)のように文字列型にキャストします)
try: num = input("数字を入力して下さい") intData = int( num ) # 整数に変換 data = 100 / intData # 割り算します print("結果",data) except ZeroDivisionError: print("0で割ることはできません") except ValueError: print("値のチェックが必要です(数字でない)") except Exception as e: print("その他のエラー", e)
スクリプトを詳しく見てみましょう!
「数字を入力して下さい」を表示して入力要求します、
整数に変換、
100で割る、
最後に結果を表示します。
これらの処理は、tryのブロック内にある事に注意しましょう。
*最初は正常ケースの動作を見てみましょう!
PyCatで[実行]をクリックします、
入力要求まできたら、好きな数字を入力しましょう、
エラーが発生しないで、割り算の結果が表示されます。
*ケース1~3までを実行して確認、エラーの発生を確認してみて下さい。
PyCatで[実行]をクリックします、
入力のプロンプト「数字を入力して下さい」が表示されたら、入力する
ケース1 文字を入力(数字以外)
ケース2 数字の0を入力
エラーで停止したら、[次へ]をクリックしてステップ実行させて、
流れを確認しましょう!
ケース3は、編集が必要になります。
ケース1
「abc」を入力してEnterすると
エラーが発生します、数字でないので変換できないエラー。
ValueError: invalid literal for int() with base 10: ''
スクリプトの流れでは、
except ValueError:
print("値のチェックが必要です(数字でない)")
でエラー停止します(このツールではわかりやすくする為に停止する)。
再実行して流れを確認してみて下さい。
ケース2
入力で「0」を入力する、
「ZeroDivisionError」のエラーが発生します。
スクリプトの流れでは、
except ZeroDivisionError:
print("0で割ることはできません")
でエラー停止します(このツールではわかりやすくする為に停止する)。
再実行して流れを確認してみて下さい。
ケース3
作業モード:編集中にして、以下のように修正
num = input()
↓
num2= input()
NameError: name 'num' is not defined
のエラーが発生する
以下に流れてメッセージを表示する
except Exception as e:
print("その他のエラー", e)
※メッセージ
その他のエラー name 'num' is not defined
・エラー監視は、tryのブロックの間が対象になります
・exceptの後にエラー名(エラーブロックが処理される)
・exceptは複数書ける
・except Exceptionはすべてのエラーの取得可能
以下の行を追加して流れを確認しよう
else
finally
はどう流れるのか?
except Exception as e: print("その他のエラー", e) else: print("正常終了") finally: print("最後はここに来ます")elseブロックは、は正常時に処理される finallyブロックはすべてのブロック終了後に処理される
※エラー発生箇所が赤ラインになりプログラムが停止します、しかし例外エラーは再実行できます。