エアハンドリングにより､ エラーが発生してもスクリプトの実行を継続させることができます｡
エラー処理とPythonをどのように行うか､ 例を挙げてやってみましょう｡
例えば､ ユーザーの入力を受けるようなプログラムを作りたいとします｡
例えば､ ユーザーにHを求めるとします｡ そこで､ 入力プロンプトを使い､ What is your H?
そして､ ここでは､ ただHをプリントするだけです｡
シンプルでいいプログラムですね｡
これを実行すると
そして､ 例えば10と入力する｡
これでよしとする｡
すべてがうまくいっている｡
でも､ 数字を入力しないで､ こんな風にしたらどうでしょう？
まあ､ それでも通用するんですけどね｡
でも､ それが私のやりたかったプログラムなのでしょうか？
年齢を入力して､ 18歳以上かどうか､ ゲームをオフで遊べるかどうかを計算したかったのかもしれませんね｡
どうすれば解決できるのか？
さて､ 1つの方法として､ これをintで包むことができますね？
そこで､ ユーザーが入力したものを整数に変換し､ これを実行すると､ 次のようになります｡
そして､ 私はこれを打つ｡
ああ､ エラーが出ました｡ "value error invalid literal for int" です｡
変換しようとしている｡
これを整数にすると､ エラーになるそうです｡
それは無理だ｡
では､ Pythonのエラー処理でこれを解決するにはどうすればよいのでしょうか｡
こうすればいいんです｡
トライフープ､ トライキーワード､ これは「このコードを試してみてください」というもので､ 必ずインデントしなければなりません｡
そこで､ このようなコードを試してみます｡
さて､ トライブ・ブロックの内部で起こることは何でもありです｡
対応できるようになった｡
ハンドリングがどのようなものか見てみましょう｡
AYRES 以外のキーワードで｡
そして､ 以外と｡
Says, Hey.
もし､ このトライブロックに何かあったら､ 何か放送されたら､ 何か言って欲しいんだ｡
だから､ この赤い空気をプログラムの外に出すのではなく､ 他のことをやってください｡
これをやってください｡
というわけで､ 言ってみることにします｡
プリントする｡
番号を入力してください｡
これからどうなるのか､ 見てみましょう｡
実行」をクリックすると
私の年齢を教えてください｡
ちんぷんかんぷんなことを書くだけです｡
そして､ 私が得たものを見てください｡
番号を入力してください｡
コピーペーストして､ ファイル全体をここに追加し､
tryブロックの中に入れるだけで､
プログラムがクラッシュする前に､
このコードを実行します｡
好きなようにやってください｡
私の場合､ 「ちょっと､ うちの番号を入力してください」と言うことができます｡
でも､ ここに我々の問題がありますよね？
番組が終わったばかりなので､ これを継続させたいのです｡
もう一度実行をクリックし､ もう一度Hを求めなければならない｡
では､ どうすれば､ ユーザーが実際に何か有効な情報を入力するまで､ この処理を続けることができるのでしょうか｡
まあ､ 前にもあったんですけどね｡
whileループをしてwhile trueと言えばいいのです｡
ロン......これ
そして､ これがうまくいけば
さて､ うまくいけば､ Hを得ることができるかもしれません｡
いや､ そうではない｡
番号を入力してください｡
年齢を教えてください｡
もう一度､ 壊してみよう｡
番号を入力してください｡
よし､ わかった｡
私の年齢は10歳です｡
これでよしとする｡
ネームテンは分かるけど｡
あ､ まだ年齢を聞かれるんだ｡
理想は､ この本音から脱却することです｡
そうですね｡
では､ どうすればいいのか？
さて､ ここでelseブロックと呼ばれるものを使うことができるのですが､ これは以前にも見たことがあります｡
しかし､ これは try except ブロックで動作します｡
最後に､ これを使ってみてください､ と書いてあるんです｡
エラーが出た場合は､ こうしてください｡
ただし､ 他にエラーがない場合は､ このようにしてください｡
だから私たちの場合は､ ブレークと言えばいいんです｡
そして､ ご存知ですか？
印刷もできる｡
ありがとうございます｡
もし､ 私がこれを止めて､ もう一度走って､ 年齢を伝えたら､ 私たちはいいなと思います｡
これでよしとする｡
もう終わりです｡
ループから脱却し､ すべてが順調です｡
そして､ このトライアクセルLSブロックは､ どこにでも行くことができます｡
ファイル全体を try except else ブロックで囲むことができます｡
これを個々の関数の中に追加すれば､ どんなものでも使えるようになります｡
これは､ Pythonがエラーを処理するために与えてくれるもう一つのツールに過ぎません｡
でも､ ちょっとお聞きしたいのです｡
プリントhの代わりに､ 例えば10を年齢で割ったものをやったらどうだろう｡
私のプログラムを実行すると
そして､ ここにゼロと入力し､ エンターキーを押す｡
あ､ 入っちゃうんだ｡
私たちの番号を入力してください｡
しかし､ 私は番号を入力した｡
これはバグが多いプログラムです｡
数字を入力しているにもかかわらず､ 同じエラーメッセージが表示されます｡
では､ どう対処すればいいのか｡
値のエラーである場合と､ 明らかにゼロ除算のエラーである場合とで､ 異なるエラーをどのように処理すればよいのでしょうか？
さて､ acceptブロックでは､ どのような種類のエラーを処理したいかを簡単に指定することができます｡
そして､ これらはコピー＆ペーストできるように､ ここに組み込まれているエラーであることを忘れないでください｡
つまり､ 私の場合､ これは値のエラーのためと言いたいので､ プログラムを実行すると､ このようになります｡
そして､ 私はゼロと入力する｡
あ､ 空気は読めますよ｡
この except lock は値のみを受け付ける｡
エラー
それ以外のエラーは気にしない｡
うーん｡
では､ ここで何ができるのか？
さて､ 1つのオプションは､ ここをコピーして､ おい､ もう1つ追加しよう､ ただし､ この場合､ ゼロ除算エラーが欲しいんだ､
と言うことです｡
ユーザーがゼロを入力した場合､ ゼロより大きいhを入力してくださいと言うことができます｡
今､ これを実行すると､ そうなるように｡
そして､ 私はゼロを行う私は､ ゼロより高いhを入力してくださいと表示されます｡
ちんぷんかんぷんなことをやっても
おっとっと｡
何かちんぷんかんぷんなことをすると､ Please enter a numberと表示される｡
最終的に数字を入力したら､ それを見てください｡
ありがとうございます｡
すべてがうまくいっている｡
さて､ ここで質問です｡
入ったらどうなるのでしょうか？
ここにも価値観の間違いがある｡
そして､ この値のエラーは､ 感嘆符を言うだけです｡
これからどうなるのでしょうか？
わかった？
この受理ブロックは1回しか実行されないので､ 数字を入力してください｡
探しているエラーをキャッチしたら､ すぐに実行する｡
そして､ ループに戻ってきてください｡
そのため､ どちらか一方のエラーしか捕捉されません｡
一息ついて､ 次のビデオでエラー処理について詳しく学びましょう｡
バイバイ｡