6

Estoy interactuando con CampaignMonitor's API usando el ruby wrapper (createsend-ruby) y me pregunto qué recomendarías en cuanto al manejo de errores/excepciones. Estaba pensando en usar begin/rescue/end de la siguiente manera, pero solo quiero saber si hay mejores técnicas para este tipo de cosas (cuando se trata de una API de terceros).¿Cómo se manejan los errores/excepciones cuando se llama a una API externa en Ruby on Rails?

begin 
    list_id = CreateSend::List.create client_id, title, unsubscribe_page, confirmed_opt_in, confirmation_success_page 
rescue Exception => e 
    logger.error "[error] CampaignMonitor error: #{e}" 
    return false 
end 

Por ejemplo, ¿tratarías de detectar excepciones específicas y tratarlas individualmente?

rescue CreateSend::BadRequest => e 

o es sólo una cuestión de preferencia individual y/o requisitos de aplicaciones?

¡Gracias por su tiempo!

Respuesta

7

Por lo general, comienzo con una sola excepción para atraparlas todas y continuar desde allí. Si hay un error en particular que aparece a menudo o necesita ser manejado de manera diferente a otro, simplemente agregue otro bloque de rescate por encima del inferior para que la excepción quede atrapada allí. Lo estás haciendo bien :)

Evita rescue Exception cuando sea posible, un simple rescue debería hacer el truco.

Solo para aclarar, puede tener cualquier número de rescates, así como asegurar:

begin 
    do_something 
rescue CS::BadRequest => e 
    logger.error "..." 
rescue CS::TimeoutError => e 
    do_something_that_retries 
rescue => e 
    logger.error "..." 
ensure 
    send_email_to_admin 
end 
+0

sería tan amable de explicar por qué * * 'rescate Exception' debe evitarse siempre que sea posible (y simplemente' rescue' solos debería ser usado)? Además, ¿cuándo no sería posible evitar la especificación de 'Exception'? – user664833

+4

'rescue' en sus propios rescates de' StandardError' y sus hijos, que es todo lo que necesita el 99% del tiempo, mientras 'rescue Exception' va más arriba en la cadena y rescata señales, salidas del sistema, sin errores de memoria y script errores A menos que esté usando 'rescue Exception' por un motivo en particular, no debería usarlo. – bensie

Cuestiones relacionadas