2013-02-16 21 views
0

我正在使用rails框架。我正在使用'media_wiki'寶石。我想趕上'丟失標題'的錯誤。見下面如何爲media_wiki捕獲'missingtitle'錯誤gem

mw = MediaWiki::Gateway.new('http://en.wikipedia.org/w/api.php/') 
wiki_content = mw.render('msadb') 

這導致了一個錯誤

MediaWiki::APIError: MediaWiki::APIError: API error: code 'missingtitle', info 'The page you specified doesn't exist' 
from /home/papri/.rvm/gems/ruby-1.9.3-p194/gems/mediawiki-gateway-0.5.0/lib/media_wiki/gateway.rb:711:in `get_response' 
from /home/papri/.rvm/gems/ruby-1.9.3-p194/gems/mediawiki-gateway-0.5.0/lib/media_wiki/gateway.rb:669:in `block in make_api_request' 
from /home/papri/.rvm/gems/ruby-1.9.3-p194/gems/rest-client-1.6.7/lib/restclient/request.rb:228:in `call' 
from /home/papri/.rvm/gems/ruby-1.9.3-p194/gems/rest-client-1.6.7/lib/restclient/request.rb:228:in `process_result' 
from /home/papri/.rvm/gems/ruby-1.9.3-p194/gems/rest-client-1.6.7/lib/restclient/request.rb:178:in `block in transmit' 
from /home/papri/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/net/http.rb:745:in `start' 
from /home/papri/.rvm/gems/ruby-1.9.3-p194/gems/rest-client-1.6.7/lib/restclient/request.rb:172:in `transmit' 
from /home/papri/.rvm/gems/ruby-1.9.3-p194/gems/rest-client-1.6.7/lib/restclient/request.rb:64:in `execute' 
from /home/papri/.rvm/gems/ruby-1.9.3-p194/gems/rest-client-1.6.7/lib/restclient/request.rb:33:in `execute' 
from /home/papri/.rvm/gems/ruby-1.9.3-p194/gems/rest-client-1.6.7/lib/restclient.rb:72:in `post' 
from /home/papri/.rvm/gems/ruby-1.9.3-p194/gems/mediawiki-gateway-0.5.0/lib/media_wiki/gateway.rb:692:in `http_send' 
from /home/papri/.rvm/gems/ruby-1.9.3-p194/gems/mediawiki-gateway-0.5.0/lib/media_wiki/gateway.rb:661:in `make_api_request' 
from /home/papri/.rvm/gems/ruby-1.9.3-p194/gems/mediawiki-gateway-0.5.0/lib/media_wiki/gateway.rb:106:in `render' 
from (irb):18 
from /home/papri/.rvm/gems/ruby-1.9.3-p194/gems/railties-3.2.6/lib/rails/commands/console.rb:47:in `start' 
from /home/papri/.rvm/gems/ruby-1.9.3-p194/gems/railties-3.2.6/lib/rails/commands/console.rb:8:in `start' 
from /home/papri/.rvm/gems/ruby-1.9.3-p194/gems/railties-3.2.6/lib/rails/commands.rb:41:in `<top (required)>' 
from script/rails:6:in `require' 

,當我試圖追上使用救援開始循環這個錯誤,它沒有工作。

mw = MediaWiki::Gateway.new('http://en.wikipedia.org/w/api.php/') 
begin 
wiki_content = mw.render('msadb') 
rescue 
print "This is a missing title error" 
end 

輸出與以前相同的錯誤。開始救援無法捕捉到這個錯誤。我應該如何捕獲這個錯誤。

+0

如果你看一下在瀏覽器中實際的頁面,你可以看到它是一個錯誤:http://en.wikipedia.org/w/api.php/ 。 – 2013-02-16 05:46:07

+0

@RyanBigg AFAIU這個問題與「MediaWiki」無關,它表示「爲什麼營救不救」。 – mudasobwa 2013-02-16 06:25:04

+0

如果他正在提出有效的API請求,他不會需要救援! – 2013-02-16 08:09:22

回答

0

MediaWiki::APIError不是StandardError後代,這就是爲什麼它不是默認rescue聲明逮住(See:「如果你寫不帶參數列表中的救援條款,該參數默認爲StandardError的。」)

所以,你需要救助條款明確指定MediaWiki::APIError

mw = MediaWiki::Gateway.new('http://en.wikipedia.org/w/api.php/') 
begin 
    wiki_content = mw.render('msadb') 
rescue MediaWiki::APIError => e 
    print "This is a missing title error" 
end 

# ⇒ This is a missing title error => nil