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

如何为计算月份天数的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:04:52