エラーが発生したときに追加情報を追加できるグローバルな例外キャプチャを使用できるようにしようとしています。「クローラー」と「アマゾン」の2つのクラスがあります。私がやりたいことは、「クロール」を呼び出して、Amazon で関数を実行し、クロール関数で例外処理を使用できるようにすることです。
ここに私が持っている2つのクラスがあります:
require 'mechanize'
class Crawler
Mechanize.html_parser = Nokogiri::HTML
def initialize
@agent = Mechanize.new
end
def crawl
puts "crawling"
begin
#execute code in Amazon class here?
rescue Exception => e
puts "Exception: #{e.message}"
puts "On url: #{@current_url}"
puts e.backtrace
end
end
def get(url)
@current_url = url
@agent.get(url)
end
end
class Amazon < Crawler
#some code with errors
def stuff
page = get("http://www.amazon.com")
puts page.parser.xpath("//asldkfjasdlkj").first['href']
end
end
a = Amazon.new
a.crawl
「クロール」内で「スタッフ」を呼び出して、スタッフ関数全体でその例外処理を使用できる方法はありますか? これを達成するためのより良い方法はありますか?
編集:これは私がやったときです
require 'mechanize'
class Crawler
Mechanize.html_parser = Nokogiri::HTML
def initialize
@agent = Mechanize.new
end
def crawl
yield
rescue Exception => e
puts "Exception: #{e.message}"
puts "On url: #{@current_url}"
puts e.backtrace
end
def get(url)
@current_url = url
@agent.get(url)
end
end
c = Crawler.new
c.crawl do
page = c.get("http://www.amazon.com")
puts page.parser.xpath("//asldkfjasdlkj").first['href']
end