Python 無料で独習 018 例外処理 

Python
この記事は約4分で読めます。

今回は前回のよく起こるエラーの続きで、
そのエラーに対してどのようにするかという
例外処理
の講義です。

エラーが出たタイミングでシステムがトラブルを起こして
止まってしまうのではなく、
なにかしらのエラーが起きたら、こういう対処をします
ということを事前に書いておきます。
それを例外処理というそうです。

題材として三角形の面積を求める数式をつかって
講義を進めていきます。

#三角形の面積を計算する
def calc_tri(base,height):
  return base*height*0.5

base = 10
height = 1

result = calc_tri(base,height)
print('計算結果:{}'.format(result))

計算結果:5.0

問題なく計算できています。
そこで底辺を表すheightを文字列に変えてみます。
すると当然のことながらエラーが出ます。

base = 10
height = '5'

result = calc_tri(base,height)
print('計算結果:{}'.format(result))

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-3-84995b63fe6b> in <module>()
      2 height = '5'
      3 
----> 4 result = calc_tri(base,height)
      5 print('計算結果:{}'.format(result))

<ipython-input-1-a78a208af43f> in calc_tri(base, height)
      1 #三角形の面積を計算する
      2 def calc_tri(base,height):
----> 3   return base*height*0.5

TypeError: can't multiply sequence by non-int of type 'float'

そこでエラーが起きそうな計算の部分の
インデントを下げて
try:
except Exception as e:
の中に入れます。
そしてその外にエラーが起きた時の出力をいれます。
また、
print(e)
といれると英文ですが、エラーの説明が出力されます。

base = 10
height = '5'

try:
  result = calc_tri(base,height)
  print('計算結果:{}'.format(result))
except Exception as e:
  print('計算できません')
  print(e)

計算できません
can't multiply sequence by non-int of type 'float'

次は別の例題です。
計算例として0で割るというエラーの処理をします。

try:
  a = 10
  b= 0
  result = a/b
except ZeroDivisionError:
  print('0で割ってます')

0で割ってます

0で割るとでてくるエラーというのは
Pythonで予めエラーとして定義されています。
それがZeroDivisionErrorです。

あと、必ず通る処理として
finally文
といものもあり、この文の中の処理は必ず出力されます。

try:
  a = 10
  b= 1
  result = a/b
except ZeroDivisionError:
  print('0で割ってます')
finally:
  print('ここは必ず通ります')

ここは必ず通ります

コメント

タイトルとURLをコピーしました