Ruby Datetime エラー nil から String への暗黙的な変換がありません
概要
null 値で Datetime (ruby) をテストしているのですが、「TypeError: nil から String への暗黙的な変換がありません」というエラーが発生します。すでに例外が実装されているのに、コードが適切に動作しないのはなぜでしょうか。これについての説明、またはそれを取り除く方法はありますか?
def get_parsed_datetime(raw_payload)
parse_datetime(raw_payload[:datetime])
rescue ArgumentError
raise Base::UnprocessableContentError, I18n.t('invalid_datetime_error')
end
def parse_datetime(datetime_value)
{
:date => Date.parse(datetime_value).strftime('%d/%m/%Y'),
:hour => Time.parse(datetime_value).hour
}
end
解決策
Date.parse(nil) と Time.parse(nil) の両方で TypeError が発生します。
get_parsed_datetime は ArgumentError のみをレスキューし、TypeError はレスキューしません。
TypeError もレスキューするバージョンは次のようになります。
def get_parsed_datetime(raw_payload)
parse_datetime(raw_payload[:datetime])
rescue ArgumentError, TypeError
raise Base::UnprocessableContentError, I18n.t('invalid_datetime_error')
end
または、すべての種類のエラーをレスキューするバージョンでは、StandardError をレスキューできる可能性があります。