2011-04-01 10 views
1

내가 사용하는 'rubyoverflow'보석 :예외 처리

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

하지만 가끔은 내가 콘솔에 오류가 발생합니다 :

라인 843 열 4

에 YAML을 구문 분석 할 수 없습니다

C : /Ruby192/lib/ruby/1.9.1/psych.rb : 148 : parse' C:/Ruby192/lib/ruby/1.9.1/psych.rb:148:in parse_stream '... rubyoverflow (1.0.1) lib/rubyoverflow.rb : 86 : request' ... C:/Ruby192/lib/ruby/1.9.1/webrick/server.rb:183:in 블록 시작 _ 스레드'

하지만 보석에 대한 오류가 아니라 예외 처리에 관한 질문입니다. 난 단지 라인 콘솔에서 얻을 :

puts "=== 1 ===" 

하지만 라인

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

이유

? 라인이

qt = Questions.retrieve_by_tag(tag).questions 

이 실패 할 경우

어떻게 내 프로그램의 esecution을 복원 할 수 있습니다?

답변

2

기본적으로 rescue 트랩 StandardError 및 그로부터 상속됩니다. the docs에서

:

기본적으로

이 구조는 StandardError와 그 하위를 차단 ...

예외가 제기되고는 아마하지, 그래서 구조는 처리하지 않습니다. , 당신은 예외가 다음과 Exception 교체 상황을 확인하기 위해

rescue Exception => e 
    print e.to_s 
end 

를 사용할 수없는 경우

보통 당신은 그것을 제기하는 방법에 대한 문서에서 구조의 매개 변수로 사용하는 알아낼 수 있지만, 그 값.

자세한 내용은 인터넷에 있지만 코드는 print a list of Exceptions입니다.

+0

아니야. 다른 스레드에서 던져지는 예외입니다 :'/webrick/server.rb:295:in 'in start_thread' '블록. 나는 rsolr Sunspot과 같은 문제에 부딪쳤다. 그것은 모델 저장에 콜백을 생성하고, 그것을 잡을 방법이없는 것 같습니다! 나는 특별한 예외'Errno :: ECONNREFUSED'와'Exception'을 잡으려고했지만, 여전히 실패한다. 스택 추적은 내 코드를 전혀 나열하지 않습니다. Webbrick부터 rsolr까지의 모든 프레임 워크 코드입니다. – Chloe