Pythonでプログラムを停止する方法を覚えた。
もうひとつ、最近覚えたことをメモしておきます。
それは、エラークラスを呼び出してエラー表示を実行したら、そこでプログラムを終了させる方法です。
分割する前は、エラー関数の最後でソースファイルをクローズしていました。
ファイルをクローズするので構文解析はストップするのですが、後の関数がクローズしたファイルを読もうとするので例外エラーをPythonが吐き出していました。
かっこ悪いけどあとで何とかしよーと思っていたのですが、ファイル分割するとエラークラス側のファイルでメインプログラムで開いたソースファイルをクローズ出来なかったので、プログラム停止の方法を探しました。
その方法は、import sys でsysをインポートして、
「sys.exit()」で停止する、というものです。
.exit()の引数には、整数 0(デフォルトは0)を入れるとシステムは「正常終了」として扱うそうです。
0以外の整数を「異常終了」として扱いますが、どんな値でどんな動作をするかはシステム次第らしく、一般には未定義との事。
要は、エラー発生時には sys.exit("エラーメッセージ") と書くと簡単にプログラムを終了することができます。
で、停止命令を加えたのが次のファイル
#!/usr/bin/python
# coding: utf-8
import sys
class err:
def error(self, er):
if er == 1:
e = u" 突然ファイルの終端になっています"
elif er == 2:
e = u" }はトークンの始まりには出来ません"
・
・ 途中省略
・
elif er == 21:
e = u" プログラム名がないよ!"
elif er == 22:
e = u" 'end.'の後になんか文があるよ!"
#infile.close()
print("")
print('Error' + str(er) + e)
sys.exit('***コンパイルを停止します***') #←ここ!
で、エラー発生させた実行結果が↓
~/PasAvr$ python parser02.py
program test;
const
yes = true;
no = false;
small = 0
big
Error8 ';'セミコロンが抜けていませんか?
***コンパイルを停止します***
~/PasAvr$
とか
~/PasAvr$ python parser02.py
program test;
const
yes = true;
no = false;
small = 0;
big = 123456;
var
id1 : integer;
true
Error9 ここは'begin'か非キーワードのくるところ!
***コンパイルを停止します***
~/PasAvr$
昨日と、停止するときの表示を変えました。
Pythonがエラーを吐き出すことなく停止するようになりました!