練習問題
8.5 練習問題
本章で習った内容を元に練習問題を解いてください。
問1 次の設問①~⑤について○か×で答えなさい。
設問
① 例外が発生すると必ずexceptブロックが処理される。
② 例外が発生していない場合でも、必ずfinallyブロック内の処理は実行される。
③ exceptブロックは複数記載することはできない
④ exceptでas 変数名を利用すると、例外の詳細な情報を取得できる。
⑤ raise文を使うことで意図的に例外を発生させることができる
問2 以下に示すソースコードを実行した結果として正しいものを答えなさい。
選択肢
① Redのみ画面に表示される。
② Red、Blue、Yellow、Pink、Black全て表示される。
③ Red、Blue、Pink、Blackが表示される。
④ Yellowのみ画面に表示される。
⑤ Red、Blue、Yellow、Pinkが表示される。
⑥ Blackのみ画面に表示される。
ソース・フォルダー: /Desktop/Python基礎講座
ファイル名: 第8章.ipynb
アクセスURL: http://localhost:8888/notebooks/Desktop/Python基礎講座/第8章.ipynb
print('Red') try: numbers = range(2) print('Blue') print(numbers[2]) print('Yellow') except IndexError: print('Pink') finally: print('Black')
問3 以下に示すソースコードを実行した場合、発生する可能性のある選択肢の例外を○か×で答えなさい。
選択肢
① KeyError(辞書など指定したキーに対応する要素がない場合に発生する例外)
② ZeroDivisionError(0除算エラー)
③ IndexError(リストでインデックス番号に対応する要素がない際に発生する例外)
④ ValueError(操作対象のオブジェクトの型は合っているけど、適切でない場合に発生するエラー(「int(‘three’)」))
ソース・フォルダー: /Desktop/Python基礎講座
ファイル名: 第8章.ipynb
アクセスURL: http://localhost:8888/notebooks/Desktop/Python基礎講座/第8章.ipynb
cnt = 0 total = 0 ave = 0 num = [0,1,2] #繰り返し処理(配列の要素数分) while True: #キーボードより数値を入力し配列に格納 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 ,'です。')
問4 問3のを実行して、ソースコードから整数文字以外を入力すると例外が発生します。整数文字以外が入力された際には、以下の実行結果になるプログラムを作成しなさい。作成する場合は問3のソースコードを利用し、変更仕様に従って下さい。
ソースコード変更仕様ソース・フォルダー: /Desktop/Python基礎講座
ファイル名: 第8章.ipynb
アクセスURL: http://localhost:8888/notebooks/Desktop/Python基礎講座/第8章.ipynb
- 繰り返し処理内に例外処理(try~except)を追加し、再度キーボード入力を行えるようにする。
- tryブロック内に含める処理は、whileブロック内全ての処理を含める。
- exceptする例外はValueErrorを指定する。
- exceptブロック内の処理は、「文字が入力されました。数値を入力して下さい。」のメッセージを画面に出力する。
問5 問4でキーボード入力値に関する例外は処理しましたが、それ以外にも以下に示す例外が発生します。
- 999より大きい値を入力された場合:0除算の例外
- 4回以上入力した場合:最大配列要素数越えの例外
上記を対処するあらゆる例外を処理するような例外処理を組み込んだプログラムを作成しなさい。
問4で作成したソースコードを利用し、変更仕様に従って作成して下さい。
実行結果ソース・フォルダー: /Desktop/Python基礎講座
ファイル名: 第8章.ipynb
アクセスURL: http://localhost:8888/notebooks/Desktop/Python基礎講座/第8章.ipynb
- 999より大きい値を入力した場合
数値を入力して下さい。(999で強制終了)>1000 --------------------------------------------------------------------------- ZeroDivisionError Traceback (most recent call last) <ipython-input-7-caf05ff69d16> in <module> 20 total += num[i] 21 ---> 22 ave = total/cnt 23 24 print('入力数は',cnt, 'です。') ZeroDivisionError: division by zero
- 4回以上入力した場合
数値を入力して下さい。(999で強制終了)>66 入力数は 1 です。 合計点は 66 です。 平均点は 66.0 です。 数値を入力して下さい。(999で強制終了)>55 入力数は 2 です。 合計点は 187 です。 平均点は 93.5 です。 数値を入力して下さい。(999で強制終了)>20 入力数は 3 です。 合計点は 328 です。 平均点は 109.33333333333333 です。 数値を入力して下さい。(999で強制終了)>10 --------------------------------------------------------------------------- IndexError Traceback (most recent call last) <ipython-input-8-caf05ff69d16> in <module> 12 break 13 elif tmpNum < 999: ---> 14 num[cnt] = tmpNum 15 cnt += 1 16 else: IndexError: list assignment index out of range
変更仕様
・tryブロックに含める処理に問3におけるwhile文内の全ての処理を含める。
・exceptブロック内の処理は、例外の詳細情報を画面に出力する。
→「エラーの原因はxxxxです。」
※xxxx=例外の詳細情報