【5日目】try とexceptで例外処理してみる
こんばんは、なぺです。
今回は、エラーメッセージが出るのを防ぐ方法、例外処理をやってみます。
例えば下記のような割り算プログラムの場合
a=input("割り算をします!割られる数字を入力してね")
b=input("割る数字を入力してね!")
a=int(a)
b=int(b)
print(a/b)
これだと、b=0を入力してしまった場合、
ZeroDivisionError: division by zero
このようなエラーが出てしまいました。
いや、割り算なんだから、0以外の数字を入力してよ~と思ってしまいますが、
もし、いろんな人が使うプログラムだったら、
どんな人が使うかわからないから、大いにあり得る!
このような例外を想定して、処理するのが、例外処理です。
まず、tryでエラーが発生する可能性のあるコードを指定します。
try:
print(a/b)
次に、exceptで発生するかもしれないエラーを指定し、
その時にどうするかを記述します。
except ZeroDivisionError:
print("0では割れません")
つなげると下記のようになります。
a=input("割り算をします!割られる数字を入力してね")
b=input("割る数字を入力してね!")
a=int(a)
b=int(b)
try:
print(a/b)
except ZeroDivisionError:
print("0では割れません")
これでばっちり!といいたいところだけど、
aに文字列を入れたらint(a)のところでValueErrorでたよ!
ということで例外追加
a=input("割り算をします!割られる数字を入力してね")
b=input("割る数字を入力してね!")
try:
a=int(a)
b=int(b)
except ValueError:
print("それ数字じゃないよ!")
try:
print(a/b)
except ZeroDivisionError:
print("0では割れません")
これでばっちり!と思いきや、a=文字列を入れると、今度はprint(a/b)でTypeError。
なるほど、文字列で割り算できないもんね。
またまた例外追加
a=input("割り算をします!割られる数字を入力してね")
b=input("割る数字を入力してね!")
try:
a=int(a)
b=int(b)
except ValueError:
print("それ数字じゃないよ!")
try:
print(a/b)
except ZeroDivisionError:
print("0では割れません")
except TypeError:
print("無理~")
これでa=文字列でも一応エラーは出なくなりました。
でもexceptを次々に追加してごたごたした感じになってしまいました。
ループを覚えれば、入力が数字じゃない場合に、また先頭に戻ったりできるのかな
もっときれいにできる方法あれば教えてください!
以上です。
pythonのコードをshellからコピペしたらインデントが消えるのなぜ~
それではまた。