Как бороться с незнанием того, какие исключения могут быть вызваны библиотечным методом в Ruby?

Это довольно широкий вопрос, но я продолжаю сталкиваться с ним при программировании на Ruby. Я в основном из C и Java, где, когда я использую библиотечную функцию или метод, я просматриваю документацию и вижу, что она возвращает при ошибке (обычно в C) или какие исключения она может генерировать (в Java).

В Ruby ситуация выглядит совершенно иначе. Просто сейчас мне нужно проанализировать некоторые JSON, которые я получаю с сервера:

data = JSON.parse(response)

Естественно, первое, что я думаю после написания этого кода, это что, если ввод плохой? Являетсяparse собирается вернуть ноль в случае ошибки или вызвать какое-то исключение, и если да, то какие?

Я проверяю документацию (http://flori.github.com/json/doc/JSON.html#M000022) и видите, просто:

«Разобрать источник строк JSON в структуру данных Ruby и вернуть ее».

Это всего лишь пример шаблона, с которым я неоднократно сталкивался в Ruby. Первоначально я полагал, что это был какой-то недостаток документации любой библиотеки, с которой я работал, но теперь я начинаю чувствовать, что это стандартная практика, и у меня несколько иное мышление, чем у программистов на Ruby. Есть какое-то соглашение, о котором я не знаю?

Как разработчики справляются с этим?

(И да, я посмотрел на код метода библиотеки и смог получить представление о том, какие исключения возникают, но я не могу быть уверен на 100%, и если это не задокументировано, мне неудобно полагаться на него.)

РЕДАКТИРОВАТЬПосмотрев на первые два ответа, позвольте мне продолжить пример синтаксического анализа JSON сверху.

Я подозреваю, что я не должен делать:

begin
  data = JSON.parse(response)
  raise "parse error" if data.nil?
rescue Exception => e
  # blahblah
end

потому что я могу посмотреть на код / тесты и увидеть, что, кажется, поднятьParserError в случае ошибки (возвращение nil не является стандартной практикой в Ruby). Буду ли я прав, говоря, что рекомендуемая практика заключается в следующем:

begin
  data = JSON.parse(response)
rescue JSON::ParserError => e
  # blahblah
end

... основываясь на том, что я узнал оParserError просматривая код и тесты?

(Я также отредактировал пример, чтобы уточнить, что это ответ сервера, который я анализирую.)

Ответы на вопрос(4)

Ваш ответ на вопрос