为无效输入创建错误消息

时间:2018-05-16 17:10:41

标签: ruby date error-messaging

我有以下代码返回任何给定月份的天数,除非有人输入的内容不是日期,否则它们的格式错误。为了解决这个问题,我想发送一个无效输入的错误消息,但我不知道如何。那么如何为这个小应用程序创建错误消息呢?

   #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!"

3 个答案:

答案 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"