前回、前々回の記事では、Pythonプログラムにパラメータを与えて実行する方法を解説しました。
しかし、もしパラメータを与えずに実行、または数字であるべきパラメータを文字にして実行した場合は、チャットエリアにエラーメッセージが表示されていましたよね。
こんなエラーが出ていたはずです。
[ERR] File “road2.py”, line 20, in <module>
[ERR] length_number = params[1]
[ERR] IndexError: list index out of range
このようなエラーメッセージが表示されたら少し格好悪いので、適切に回避する方法を紹介しましょう。
エラーが発生したときの回避方法
Pythonプログラムを実行してエラーが発生したら「例外処理」というプログラムに移動する方法を、これから紹介します。
「例外処理」とは、例外、つまり「正常ではない状態のこと」を指しますので、簡単に言うとエラーが発生している状態を意味しています。
例外処理(エラー処理)をおこなうプログラムの流れを日本語で説明すると
- 今からプログラムの実行を試します
- エラーが発生するかもしれないプログラムを実行します
- もしエラーが発生した場合は
- エラー発生時用のプログラムを実行します
それをPythonプログラムで書くと、このようになります。
ご自身の環境で動かしてみたい場合は、以下の場所に保存してください。
ファイルパス(Macの場合)
/Users/ユーザ名/Library/Application Support/minecraft/mcpipy/error.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# coding: UTF-8 # 上のコードを書くことで、日本語のコメントを有効にします # マインクラフト用のプログラムを読み込みます from mine import * # sysというプログラムを読み込みます import sys # マインクラフト用のプログラムを、すぐに使えるように「mc」として準備します mc = Minecraft() # チャットメッセージを出力します mc.postToChat("error.py の処理を開始します") # ここから: 今からプログラムの実行を試します try: # エラーが発生するかもしれないプログラムを実行します mc.postToChat("エラーが発生するかな?") # わざとエラー出す命令を書いておきます raise ValueError # もしエラーが発生した場合 except: # エラー発生時用のプログラムを実行します mc.postToChat("エラーが発生しました") mc.postToChat("プログラムの実行を途中で終了します") # プログラム停止 sys.exit() # ここまで: 今からプログラムの実行を試します # エラーが発生しなかった場合に限り、プログラムの処理がここまで到達します mc.postToChat("正常に処理が終了しました") |
このプログラムを動かしてみる場合は、以下のコマンドをチャット入力してください。
上のプログラムでは「try」と「except」という命令が書かれていますね。
try は日本語で「試してみる」という意味で、
except は日本語で「例外」という意味で、つまりエラー発生時のことです。
「try」から始まる部分をお試しで実行してみて、もし処理の途中でエラーが発生したら「except」から始まるプログラムに移動。
そしてエラーが発生したとき専用のプログラムが動き出すという流れです。
火災が発生したときにだけ天井から水が吹き出てくるような、そんな仕組みですね。
21 22 |
# わざとエラー出す命令を書いておきます raise ValueError |
このプログラムは自分の好きなタイミングでエラーを発生させる命令で、プログラムの動作を確認するときや、何らかの異常を検知したときに利用します。
29 30 |
# プログラム停止 sys.exit() |
これはプログラムの処理を強制的に終了する命令で、この命令が実行された以降のプログラムは動きません。
のコマンドをチャット入力で実行すると、Pythonプログラム内でエラーが発生し、以下のような結果が得られるでしょう。
もしエラーを発生させない実験をしたい場合は、わざとエラーを発生させている22行めをコメントアウトにして実行してみるとうまくゆくでしょう。
コメントアウトとは行単位でプログラムを無効にすることであり、# 記号を用います。
21 22 |
# わざとエラー出す命令を書いておきます # raise ValueError |
Pythonプログラムをこの状態にして上書き保存し、以下のコマンド
を実行した結果、先ほどとチャットメッセージの内容が変わったことに気づくはずです。
ここではエラーが発生した場合の処理と、エラーが発生しなかった場合の処理の、命令の分け方を紹介しました。
次の記事ではこのエラー処理を応用して、パラメータのエラーが発生した場合のプログラムの書き方を紹介してゆきます。