練習問題 解答

8.6 練習問題 解答

問1

① ×:対応する例外クラスがexceptブロックに設定されていないと処理は行われない。
② ○:finallyブロックは、例外発生の有無に関わらず必ず処理されます。
③ ×:複数のexceptブロックを指定することができます。
④ ○:変数から例外クラスの情報を取得することができます。
⑤ ○

問2

③ 「Yellow」を表示する前の処理で例外が発生します。

問3

① ×:この例外が発生するクラスは利用していない。
② ○:入力数値が無い(1回目で999を入力)場合発生します。
③ ○:1つ目の繰り返し処理の条件が間違っているため、4回目の数値入力で発生します。
④ 〇:input関数で入力した値をint関数で型を変換しているため、数字以外の文字列を入力した場合に発生します。

問4

1cnt = 0
2total = 0
3ave = 0
4num = [0,1,2]
5 
6#繰り返し処理(配列の要素数分)
7    while True:
8        try:
9            #キーボードより数値を入力し配列に格納
10            tmpNum = int(input('数値を入力して下さい。(999で強制終了)>'))
11 
12            #入力数値が999なら強制でループを抜ける
13            if tmpNum == 999:
14                break
15            elif tmpNum < 999:
16                num[cnt] = tmpNum
17                cnt += 1
18            else:
19                num[cnt] = tmpNum
20 
21            for i in range(cnt):
22                total += num[i]
23 
24            ave = total/cnt
25 
26            print('入力数は',cnt, 'です。')
27            print('合計点は',total,'です。')
28            print('平均点は',ave ,'です。')
29 
30        except ValueError:
31            print('文字が出力されました。数値を入力してください。')

解説

まずはwhileブロック内の処理全てをtryブロックで囲んでいます。そしてexcept内に処理する例外クラス「ValueError」を指定しています。
exceptブロックの処理が終っても処理自体がwhile内なので、繰り返し処理の先頭に戻り再入力を促します。

問5

1cnt = 0
2total = 0
3ave = 0
4num = [0,1,2]
5 
6#繰り返し処理(配列の要素数分)
7while True:
8    try:
9        #キーボードより数値を入力し配列に格納
10        tmpNum = int(input('数値を入力して下さい。(999で強制終了)>'))
11 
12        #入力数値が999なら強制でループを抜ける
13        if tmpNum == 999:
14            break
15        elif tmpNum < 999:
16            num[cnt] = tmpNum
17            cnt += 1
18        else:
19            num[cnt] = tmpNum
20 
21        for i in range(cnt):
22            total += num[i]
23 
24        ave = total/cnt
25 
26        print('入力数は',cnt, 'です。')
27        print('合計点は',total,'です。')
28        print('平均点は',ave ,'です。')
29 
30    except ValueError:
31        print('文字が出力されました。数値を入力してください。')
32    except ZeroDivisionError as e:
33        print('エラーの原因は',e,'です。')
34    except IndexError as e:
35        print('エラーの原因は',e,'です。')

解説

複数のexceptを設け、ValueErrorに加え、ZeroDivisionError、IndexErrorを指定しており、exceptブロック内では例外のインスタンスを指し示す変数「e」を利用して、例外の詳細情報を画面に表示します。except以降の処理は無いのでこのまま処理が終了します。


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

f