3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Python3 とりあえず理解する例外処理

Posted at

#例外処理について
いまいち理解できなかったので、ざっくり覚えて使ってたらなんとなくわかってきた

##try:

try:
   r = x + y
   print(r)
   z = True

ここには処理したい内容を記入
この場合 r に x + y を代入した後rを出力する
後々の判定で分かり易くするため最後にz に True を代入

##except:
ここにはエラーが起きた場合の処理を書く
TypeErrorと書いてあるのはエラーの種類
エラーの種類とエラーが出た時にコンソールに出てくる英文の左端の方にかいてあるやつ
エラーが起きたら z に False を代入

except TypeError:
    z = False

#finally:

finally:
    if z:
        print("エラー起きてないよ")
    else:
        print("エラー起きたよ")

ここにはエラーが起きようが起きまいが最後に処理する項目を書く
この場合zの中身を判定して文字を出力

#どうなるか

エラーにならない場合
x = 1
y = 2

try:
    r = x + y
    print(r)
    z = True

except TypeError:
    z = False

finally:
    if z:
        print("エラー起きてないよ")
    else:
        print("エラー起きたよ")

# 結果
>>> 3

>>> エラー起きてないよ

r = 1 + 2
print(r)
見て分かるようにエラーになる処理がないので
最後の zTrue が代入され try: 内の処理は無事成功
エラーがー起きようが起きまいが処理する***finally:***に飛んで
ifで z を判定、z は True なので print("エラー起きてないよ") が実行される

エラーにならない場合
x = 1
y = "文字"

try:
    r = x + y
    print(r)
    z = True

except TypeError:
    z = False

finally:
    if z:
        print("エラー起きてないよ")
    else:
        print("エラー起きたよ")

# 結果
>>> エラー起きたよ

x は数値で y は文字列
文字列型と整数型を + する、加算は出来ないので所謂くっつける場合はstr(整数型)としないとTypeErrorが発生します
なので、ここでエラーが発生して r に代入どころか次の行の print(r) にも行けず
except TypeError: に飛んで z = False の代入をします
おなじみ***finally:***はエラーが起きようが起きまいが処理するので
z を判定すると False なっているので print("エラー起きたよ") が実行されるという

本来は

TypeError: unsupported operand type(s) for +: 'int' and 'str'

このようなエラーが出て処理がプログラムが停止するけども
例外処理をすることによって、エラーが発生しても停止せずに処理を続けることができる

#コードを臨機応変にさせよう

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?