KNIMEST’s diary

KNIME使いがPythonも使いたくて勉強中

【Python学習帳】026_端末からの入力と誤入力

初学者を対象としている京都大学の無料Python教材の学習中です。
「プログラミング演習 Python 2021」
Version2021_10_08_01.pdf

hdl.handle.net

CC-BY-NC-NDライセンスに従って引用します。

第5章の制御構造の勉強中で、if 文の基礎まで学びました。

knimest.hatenablog.com

knimest.hatenablog.com

今回は

5.5端末からの入力

5.6エラーへの対処

を学びます。

これまで平方根を計算したい数値をプログラムに埋め込んで計算してきました. 端末から入力する方法を考えましょう.

input 関数の引数(() 内に書く文字列)は端末に表示する文字列です.また,返り値(呼び出し結果)のデータ型は文字列です.

ですから、input関数を使って数値を入力させたい場合は下記の点に注意しなくてはいけません。

数値データを得るにはこれを int() や float() で適した型に変換します.

先の平方根を求めるプログラムでは x の値を設定している箇所を

    x = input(“平方根を求める数 “)

    x = float(x)

 

と入れ替えるか,あるいは一括して

    x = float(input(“平方根を求める数 “))

と書きかえることで変数 x に端末から入力された数値を得ることができます

上記の通りaの方は”2.0”と入れても文字列データの扱いになっているので注意が必要です。一方でxは整数値の2を入れても2.0のfloat型データになりますね。

 

ユーザに手入力してもらったり、あるいはExcelファイルから読み込んだりってプログラム上よくある使い方なんですが、とにかくよくあるのが想定外の入力によるエラーです。

関数 float() や int() は引数として与えられた文字列が数値として解釈できない

場合 ValueError という種類のエラーを発生します.特にその場合の処理を指定し

ていなければ Python はそこで処理を中断します.

そこで不正な入力があったら分岐処理してプログラムを止めないようにしたいのですが、その目的で

プログラム内でエラーを処理するには try 文を使います.

教材に提示されたサンプルコード5-10.pyを少しだけ変えていろいろと使ってみました。

プログラムは継続的に入力を受け取りエラー処理を行い,正の数値の場合の み print(x) で値を出力します.

try 文では例外を生じるブロックを try 文の中に入れ,except 文で例外を指定して 処理するブロックを書きます.例外が指定されていない except 文は(その上で処理されるものを除いて)すべての例外に対して機能します.

この節の締めくくりの言葉には納得です。

外部から与えられる入力はプログラマーには統制できません.正しい入力だけを想定して書かれたプログラムは想定外の入力に正しく応答できず,場合によっては間違った結果を出してしまう恐れもあります.外部からの入力については「疑ってかかる」ことが重要で,値の妥当性を検査したり,生じえるエラーの処理を的確に行ったりすることが望まれます.

次回は基本的な数値データ処理機能をいくつか学習します。

knimest.hatenablog.com