YYYYMMを入力してください、の入力チェック

投稿者: | 2022-06-19

from datetime import datetime

def get_yymm():
    while True:
        yymm = input('yymm?:')
        if yymm == '0':
            print('Process interrupted')
            break
        try:
            return datetime.strptime(yymm, '%y%m')
        except Exception as ex:
            print(ex)
            print('Please enter the correct characters')

dt = get_yymm()
print(dt)

OLD

from datetime import datetime

def input_yyyymm(): 
    while True:
        yyyymm = input("報告月(作業月)を入力してください(YYYYMM形式)(キャンセル:0+Enter)")
        if yyyymm == '0':
            print('処理を中断しました')
            break
        try: 
            dt = datetime.strptime(yyyymm, '%Y%m')
            return dt.strftime('%Y%m') # 例.入力が20221でも202201に変換させるため
        except:
            print(f'YYYYMM形式(半角数値)で入力してください。')

# 上記だと、20221で、通ってしまう。


def input_yyyymm():
    str = input('YYYYMM形式で入力してください?(0:終了): ') + '01'
    if str == "001":
        print('処理を中断します')
        sys.exit()
    try:
        if len(str) != 8:
            raise Exception
        # import dateutil.parser import parse? ここはstrptimeだとだめか。    
        dt = parse(str)
        yyyymm_str = dt.strftime('%Y%m') 
        return yyyymm_str
    except:
       print('YYYYMMを正確に入力してください')
       return input_yyyymm()