2011-04-01 3 views
1

J'utilise bijou 'de rubyoverflow' dans des rails:manutention exception

begin 
    puts "=== 1 ===" 
    qt = Questions.retrieve_by_tag(tag).questions 
    puts "=== 2 ===" 
rescue 
    puts "=== 3 ===" 
end 

Mais parfois, je reçois l'erreur sur la console:

n'a pas pu analyser YAML à la ligne 843 colonne 4

C: /Ruby192/lib/ruby/1.9.1/psych.rb: 148: dans parse' C:/Ruby192/lib/ruby/1.9.1/psych.rb:148:in parse_stream '... rubyoverflow (1.0.1) lib/rubyoverflow.rb: 86: dans request' ... C:/Ruby192/lib/ruby/1.9.1/webrick/server.rb:183:in bloc dans start_thread'

Mais la question n'est pas sur l'erreur dans la gemme, mais sur la gestion des exceptions. Je reçois dans la console seule ligne:

puts "=== 1 ===" 

mais pas les lignes

puts "=== 2 ===" 
    puts "=== 3 ===" 

pourquoi?

Comment puis-je restaurer esecution de mon programme si la ligne

qt = Questions.retrieve_by_tag(tag).questions 

échoue?

Répondre

2

Par défaut rescue les traps StandardError et tout ce qui en hérite.

De the docs:

Par défaut, le sauvetage n'intercepte StandardError et ses descendants ...

L'exception soulevée est sans doute pas que, si le sauvetage ne gère pas.

Normalement, vous pouvez comprendre ce à utiliser comme paramètre de sauvetage de la documentation à la méthode élever, mais, sinon, vous pouvez utiliser

rescue Exception => e 
    print e.to_s 
end 

pour voir ce que l'exception est, puis remplacer Exception avec cette valeur.

Plus d'informations sont sur Internet, mais voici un morceau de code à print a list of Exceptions.

+0

Ce n'est pas ça. Notez qu'il s'agit d'une exception lancée sur un autre thread: '/webrick/server.rb:295:in 'block in start_thread''. J'ai rencontré le même problème avec rsolr Sunspot. Il crée un rappel sur la sauvegarde du modèle, et il semble qu'il n'y a aucun moyen de l'attraper! J'ai essayé d'attraper l'exception spécifique 'Errno :: ECONNREFUSED', et aussi' Exception', mais il échoue toujours. La trace de la pile ne répertorie aucun de mes codes. C'est tout le code du framework, de Webbrick à rsolr. – Chloe