人様に迷惑かけないためにも、validationって大事ですね~

この前、validationというものを教えてもらいました。
詳しくはこちらに載っていますが、
https://wa3.i-3-i.info/word11610.html

簡単に言うと入力値チェックのようです~
具体的な例だと、WebページのTELの所にTELじゃないものが入っていたら
エラーとして吐き出す機能ですかね?

今回も、実際に簡単なものを作ってみて、
validationについて理解を深めたいと思います~

今回はこんな感じに、入力値が数字かどうか確認する
validationプログラムを作りました~

|--validation
|  |--main.py
|  |--validation.py
# validation.py
class Validation():
    @staticmethod
    def int_ck(in_data):
        if type(in_data) != int:
            raise TypeError('入力値が整数ではありません。', in_data)
# main.py
import sys
from validation import Validation


def validation_test(num):
    if num == 1:
        Validation.int_ck(123)
    elif num == 2:
        Validation.int_ck(456.0)
    elif num == 3:
        Validation.int_ck('123')
    else:
        raise IndexError('1~3を入力してください。')
    print('正常に終了しました')


validation_test(int(sys.argv[1]))

昨日と同じく、再利用可能プログラムを同じディレクトリに置いてあります~
main.pyは1,2,3のどれかを引数で渡すと実行する形にしました~
早速確認してみましょう~
(Tracebackがあると見づらいので、貼り付け時に成形してます~)

$ python main.py 1
正常に終了しました

$ python main.py 2
TypeError: ('入力値が整数ではありません。', 456.0)

$ python main.py 3
TypeError: ('入力値が整数ではありません。', '123')

$ python main.py 4
IndexError: 1~3を入力してください。

お~とりあえずちゃんとチェックされてそうです♪
でも、この場合だとどんな型になっているか知りたいですね…

validation.pyを改良して、型表示できるようにしましょう~

class Validation():
    @staticmethod
    def int_ck(in_data):
        if type(in_data) != int:
            # ↓を改良
            raise TypeError('入力値が整数ではありません。', in_data, type(in_data))

では、再び実行です~

$ python main.py 1
正常に終了しました

$ python main.py 2
TypeError: ('入力値が整数ではありません。', 456.0, <class 'float'>)

$ python main.py 3
TypeError: ('入力値が整数ではありません。', '123', <class 'str'>)

$ python main.py 4
IndexError: 1~3を入力してください。

お~いい感じじゃないでしょうか?
昨日の勉強(再利用プログラム)もちゃんと活かせてますし、
これで受け取ったデータが数字かどうかはばっちりチェックできますね!

これをもっと発展させるならどうしましょ?
文字列チェックはすぐ作れそうですね!
フォーマットを受け取って、その通りになっているかチェック!
とかだと色々な場面で使えそうですね~

フォーマット作りで四苦八苦しそうですが~

いやぁ、勉強になりました~