練習問題 解答

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


NEXT>> 第9章 ファイル入出力