Como lidar com não saber quais exceções podem ser levantadas por um método de biblioteca em Ruby?

Esta é uma questão bastante ampla, mas é uma que continuo a encontrar quando estou programando em Ruby. Eu sou de um fundo em grande parte C e Java, onde quando eu uso uma função de biblioteca ou método, eu olho para a documentação e ver o que ele retorna em erro (geralmente em C) ou que exceções pode jogar (em Java).

Em Ruby, a situação parece completamente diferente. Só agora preciso analisar alguns JSON que recebo de um servidor:

data = JSON.parse(response)

Naturalmente, a primeira coisa que penso depois de escrever este código é, e se a entrada for ruim? Éparse vai retornar nil em erro, ou levantar alguma exceção, e em caso afirmativo, quais?

Eu verifico a documentação (http://flori.github.com/json/doc/JSON.html#M000022) e veja, simplesmente:

"Analise a fonte da cadeia JSON em uma estrutura de dados Ruby e retorne-a."

Este é apenas um exemplo de um padrão em que corri repetidamente em Ruby. Originalmente, eu percebi que era uma lacuna da documentação de qualquer biblioteca com a qual eu estava trabalhando, mas agora estou começando a sentir que isso é uma prática padrão e estou em uma mentalidade um pouco diferente dos programadores Ruby. Existe alguma convenção de que não tenho conhecimento?

Como os desenvolvedores lidam com isso?

(E sim, olhei o código do método da biblioteca e posso ter uma ideia de quais exceções são levantadas, mas não posso ter 100% de certeza e, se não estiver documentado, sinto-me desconfortável por confiar nele.)

EDITARDepois de olhar as duas primeiras respostas, deixe-me continuar o exemplo de análise JSON acima.

Eu suspeito que não devo fazer:

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

porque eu posso olhar para o código / testes e ver parece levantar umParserError no erro (retornar nil parece não ser uma prática padrão no Ruby). Eu estaria correto em dizer que a prática recomendada é fazer:

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

... com base no que aprendi sobreParserError olhando através do código e testes?

(Eu também editei o exemplo para esclarecer que é uma resposta de um servidor que estou analisando.)

questionAnswers(4)

yourAnswerToTheQuestion