我有以下代码返回任何给定月份的天数,除非有人输入的内容不是日期,否则它们的格式错误。为了解决这个问题,我想发送一个无效输入的错误消息,但我不知道如何。那么如何为这个小应用程序创建错误消息呢?
#type in the month and year you want like so ---> "Feb 2034"
require 'date'
input = gets.chomp
inputArray = input.split(" ").to_a
textMonth = inputArray[0]
textYear = inputArray[1]
startOfMonth = Date.strptime(input, "%b %Y")
nextMonth = startOfMonth.next_month
endOfMonth = nextMonth - 1
daysInMonth = (endOfMonth - startOfMonth + 1).to_i
puts "#{textMonth} of year #{textYear} has #{daysInMonth} days!"
答案 0 :(得分:1)
执行此操作的最佳方法可能是将输入置于while循环中,每次输入都没有达到您的预期时,会提示您输入新的答案。
要检查输入,您应使用Regexp。这是explanation 如何编写正则表达式以匹配日期。
答案 1 :(得分:1)
对于创建自定义错误,请参阅以下代码:
在这里,我为错误的日期输入创建并引发InvalidDateError
。
#type in the month and year you want like so ---> "Feb 2034"
class InvalidDateError < StandardError
end
require 'date'
require 'pry-byebug'
input = gets.chomp
inputArray = input.split(" ").to_a
textMonth = inputArray[0]
textYear = inputArray[1]
begin
startOfMonth = Date.strptime(input, "%b %Y")
nextMonth = startOfMonth.next_month
endOfMonth = nextMonth - 1
daysInMonth = (endOfMonth - startOfMonth + 1).to_i
puts "#{textMonth} of year #{textYear} has #{daysInMonth} days!"
rescue StandardError=> e
raise InvalidDateError.new("Invalid Date : #{input}")
end
如果您不想提出错误并且只想显示错误消息,请替换raise InvalidDateError.new("Invalid Date : #{input}")
与puts "Invalid Date : #{input}"
答案 2 :(得分:1)
根据Viktor的建议,并从crantok
中偷走了:)require 'date'
date_valid = false
while !date_valid
puts 'Insert date as yyyy-mm-dd:'
input_date = gets.chomp
begin
parsed_date = Date.parse(input_date)
date_valid = true
rescue ArgumentError
puts 'format error'
end
end
month = parsed_date.month
year = parsed_date.year
days_in_month = Date.new(year, month, -1).day
puts "In #{year} month #{month} has #{days_in_month} days"