¿Cómo lidiar con no saber qué excepciones puede generar un método de biblioteca en Ruby?

Esta es una pregunta un tanto amplia, pero es una que continúo encontrando cuando programo en Ruby. Soy de un fondo en gran parte de C y Java, donde cuando uso una función o método de biblioteca, miro la documentación y veo lo que devuelve en caso de error (generalmente en C) o qué excepciones puede lanzar (en Java).

En Ruby, la situación parece completamente diferente. Justo ahora necesito analizar algunos JSON que recibo de un servidor:

data = JSON.parse(response)

Naturalmente, lo primero que pienso después de escribir este código es, ¿qué pasa si la entrada es mala? Esparse va a devolver cero en caso de error, o levanta alguna excepción, y si es así, ¿cuáles?

Compruebo la documentación (http://flori.github.com/json/doc/JSON.html#M000022) y ver, simplemente:

"Analizar el origen de la cadena JSON en una estructura de datos de Ruby y devolverlo".

Este es solo un ejemplo de un patrón que he encontrado repetidamente en Ruby. Originalmente, pensé que era una deficiencia de la documentación de cualquier biblioteca con la que estaba trabajando, pero ahora estoy empezando a sentir que esto es una práctica estándar y tengo una mentalidad algo diferente a la de los programadores de Ruby. ¿Hay alguna convención que desconozco?

¿Cómo lidian los desarrolladores con esto?

(Y sí, miré el código del método de la biblioteca y puedo hacerme una idea de qué excepciones se producen, pero no puedo estar 100% seguro y si no está documentado, me siento incómodo al confiar en él).

EDITAR: Después de ver las dos primeras respuestas, permítame continuar con el ejemplo de análisis JSON de arriba.

Sospecho que no debería hacer:

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

Porque puedo mirar el código / pruebas y ver que parece elevar unParserError en caso de error (devolver nil no parece ser una práctica estándar en Ruby). ¿Sería correcto al decir que la práctica recomendada es hacer:

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

... basado en lo que aprendíParserError ¿Mirando a través del código y las pruebas?

(También edité el ejemplo para aclarar que es una respuesta de un servidor que estoy analizando).

Respuestas a la pregunta(4)

Su respuesta a la pregunta