如何为计算月份天数的Ruby程序添加无效输入错误提示?
为Ruby日期天数计算程序添加错误提示功能
嗨,我来帮你搞定这个问题!你的代码在输入格式正确时运行得很顺畅,但确实没考虑到无效输入的情况——比如用户输入乱七八糟的字符串、格式不对的日期,或者只输入一半内容,这时候Date.strptime就会直接抛出错误,程序直接崩掉。咱们可以用Ruby的异常处理机制加上简单的输入校验来解决这个问题。
问题分析
原代码的核心问题在于:
- 当输入无法被
%b %Y格式解析时(比如输入“2023 12”“abc def”),Date.strptime会抛出ArgumentError异常,程序直接终止 - 如果用户输入的内容拆分后不足两个元素(比如只输入“Feb”或者空输入),后续的
textYear会是nil,也会引发问题
解决方案:添加异常捕获与输入校验
我们可以用begin-rescue块捕获解析时的异常,同时先做基础的输入格式检查,给用户清晰的错误提示。修改后的代码如下:
# 请按照格式输入月份和年份,例如:"Feb 2034" require 'date' print "请输入月份和年份(格式如:Feb 2034):" input = gets.chomp # 先做基础输入校验 if input.strip.empty? puts "错误:输入不能为空!请按照指定格式输入。" else input_array = input.split if input_array.length != 2 puts "错误:输入格式不正确!请输入「英文月份缩写 年份」的格式,例如:Feb 2034。" else begin # 尝试解析日期 start_of_month = Date.strptime(input, "%b %Y") next_month = start_of_month.next_month end_of_month = next_month - 1 days_in_month = (end_of_month - start_of_month + 1).to_i puts "#{input_array[0]} of year #{input_array[1]} has #{days_in_month} days!" rescue ArgumentError # 捕获解析失败的异常 puts "错误:输入的日期无效!请确认月份是英文缩写(如Jan/Feb)且年份为有效数字,例如:Feb 2034。" end end end
代码说明
- 基础输入校验:先检查输入是否为空,再检查拆分后的元素数量是否为2,提前拦截明显的格式错误
- 异常捕获:用
begin-rescue包裹Date.strptime相关代码,当解析失败时触发rescue块,输出友好的错误提示,而不是直接崩溃 - 用户引导:在提示信息里明确告诉用户正确的输入格式,帮助用户修正输入
这样一来,不管用户输入空内容、格式不对的字符串,还是无效的日期(比如“Feb 99999”或者“13 2023”),程序都会给出清晰的错误提示,而不是直接终止啦。
内容的提问来源于stack exchange,提问作者Ryan
相关产品推荐
相关产品推荐

