You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对双日期输入场景抛出自定义ValueError并引导用户重输

核心问题

原代码存在两处逻辑缺陷,导致无法捕获输入不完整的场景:

  • 输入内容按逗号分割、解包赋值的逻辑未做异常处理,当用户输入内容不含逗号、分割后元素数量不等于2时,会直接触发Python原生解包错误,不会进入后续日期校验流程。
  • validate函数内的逐字符遍历为冗余逻辑,datetime.datetime.strptime本身在解析不符合%Y-%m-%d格式的字符串时就会抛出ValueError,额外循环无实际校验作用。
修正代码

将输入分割、解包、日期校验全流程纳入异常捕获,任意环节不符合要求时打印统一自定义提示,重新唤起输入框,直到输入完全符合规则才退出循环:

import datetime

def validate(date_text):
    try:
        # 自动去除日期字符串前后的误输入空格
        datetime.datetime.strptime(date_text.strip(), '%Y-%m-%d')
        return True
    except ValueError:
        print("Incorrect date entered, please enter dates in YYYY-MM-DD format ONLY")
        return False

while True:
    raw_input = input("Enter employee start and termination date separated by (,)  in YYYY-MM-DD format only: ")
    # 单独捕获分割解包异常,覆盖输入不完整、逗号数量不对的场景
    try:
        start_date, end_date = raw_input.split(",")
    except ValueError:
        print("Incorrect date entered, please enter dates in YYYY-MM-DD format ONLY")
        continue
    # 两个日期均校验通过才退出循环
    if validate(start_date) and validate(end_date):
        break
逻辑说明
  • 所有触发ValueError的场景(输入内容分割后不足/超过2段、日期段不符合YYYY-MM-DD格式)都会被捕获,统一返回要求的自定义提示,不会弹出Python原生错误信息。
  • 任意校验不通过时会通过continue直接进入下一轮循环,重新展示输入提示,不需要额外写递归或跳转逻辑。
  • 增加strip()处理兼容用户不小心输入的前后空格,提升输入容错性。

内容的提问来源于stack exchange,提问作者biggboss2019

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 01:18:23