2017-08-28 1 views
0

J'ai le code suivant pour m'aider à détecter les erreurs de redirection lors du traitement des URL.Comment attraper différents types d'erreurs en même temps?

begin 
    page = Nokogiri::HTML(uri.open(redirect: false)) 
rescue OpenURI::HTTPRedirect => redirect 
    uri = redirect.uri 
    puts "retry #{tries}: #{uri}" 
    retry if (tries-=1) > 0 
    raise 

Cela fonctionne bien pour les erreurs de redirection d'URL, mais n'attrape aucun autre type d'erreur. Par exemple, une URL a renvoyé une erreur 416, qui n'a pas pu être gérée par le code ci-dessus.

Je peux utiliser

rescue StandardError => e 

pour attraper l'erreur 416 et sauter l'URL que j'étais traitement, mais comment puis-je attraper les deux erreurs en même temps pour que quand il y a une erreur de redirection, le code sait où rediriger, et quand il y a d'autres types d'erreurs, le code sait quand sauter?

Répondre

4

Juste besoin de mettre dans un autre sauvetage. Vous pouvez en mettre autant que vous avez besoin.

begin 
    page = Nokogiri::HTML(uri.open(redirect: false)) 
rescue OpenURI::HTTPRedirect => redirect 
    uri = redirect.uri 
    puts "retry #{tries}: #{uri}" 
    retry if (tries-=1) > 0 
    raise 
rescue OtherError => e 
    # do something