練習問題 解答
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以降の処理は無いのでこのまま処理が終了します。