練習問題 解答
8.6 練習問題 解答
問1
① ×:対応する例外クラスがexceptブロックに設定されていないと処理は行われない。
② ○:finallyブロックは、例外発生の有無に関わらず必ず処理されます。
③ ×:複数のexceptブロックを指定することができます。
④ ○:変数から例外クラスの情報を取得することができます。
⑤ ○
問2
③ 「Yellow」を表示する前の処理で例外が発生します。
問3
① ×:この例外が発生するクラスは利用していない。
② ○:入力数値が無い(1回目で999を入力)場合発生します。
③ ○:1つ目の繰り返し処理の条件が間違っているため、4回目の数値入力で発生します。
④ 〇:input関数で入力した値をint関数で型を変換しているため、数字以外の文字列を入力した場合に発生します。
問4
cnt = 0
total = 0
ave = 0
num = [0,1,2]
#繰り返し処理(配列の要素数分)
while True:
try:
#キーボードより数値を入力し配列に格納
tmpNum = int(input('数値を入力して下さい。(999で強制終了)>'))
#入力数値が999なら強制でループを抜ける
if tmpNum == 999:
break
elif tmpNum < 999:
num[cnt] = tmpNum
cnt += 1
else:
num[cnt] = tmpNum
for i in range(cnt):
total += num[i]
ave = total/cnt
print('入力数は',cnt, 'です。')
print('合計点は',total,'です。')
print('平均点は',ave ,'です。')
except ValueError:
print('文字が出力されました。数値を入力してください。')
解説
まずはwhileブロック内の処理全てをtryブロックで囲んでいます。そしてexcept内に処理する例外クラス「ValueError」を指定しています。
exceptブロックの処理が終っても処理自体がwhile内なので、繰り返し処理の先頭に戻り再入力を促します。
問5
cnt = 0
total = 0
ave = 0
num = [0,1,2]
#繰り返し処理(配列の要素数分)
while True:
try:
#キーボードより数値を入力し配列に格納
tmpNum = int(input('数値を入力して下さい。(999で強制終了)>'))
#入力数値が999なら強制でループを抜ける
if tmpNum == 999:
break
elif tmpNum < 999:
num[cnt] = tmpNum
cnt += 1
else:
num[cnt] = tmpNum
for i in range(cnt):
total += num[i]
ave = total/cnt
print('入力数は',cnt, 'です。')
print('合計点は',total,'です。')
print('平均点は',ave ,'です。')
except ValueError:
print('文字が出力されました。数値を入力してください。')
except ZeroDivisionError as e:
print('エラーの原因は',e,'です。')
except IndexError as e:
print('エラーの原因は',e,'です。')
解説
複数のexceptを設け、ValueErrorに加え、ZeroDivisionError、IndexErrorを指定しており、exceptブロック内では例外のインスタンスを指し示す変数「e」を利用して、例外の詳細情報を画面に表示します。except以降の処理は無いのでこのまま処理が終了します。