理系母の趣味はプログラミング

理系院卒、メーカー技術職の二児の母が、PythonやVBAで色々と作ってアップしていくブログです。

【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からコピペしたらインデントが消えるのなぜ~

 

それではまた。