Ignoring Exceptions


#1

i am using hpricot to parse xml and place it into an object named ‘x’

some_variable = (x.at(“some_element_name”).innerHTML
if x.at(“some_element_name”))

problem is i have a TON of"some_element_name" to assign
and i dont want to do a if check for everyone of them

is there anyway to do a straight

some_variable = x.at(“some_element_name”).innerHTML

and contain them within a begin end and ignore all noMethodExceptions ?
i am ok with having some_variable = null

*noMethodException is raised when i call a .innerHTML method on an
element that doesnt exist.

if i do a rescue exception , it catches it and thats the end of it , it
stops executing.

any ideas ?


#2

On Feb 20, 11:14 am, Lin Wj removed_email_address@domain.invalid wrote:

some_variable = x.at(“some_element_name”).innerHTML

any ideas ?

Make a function that does the work for you?

def html_from_element(x, name)
elem = x.at(name)
return elem && elem.innerHTML
end


#3

On Fri, Feb 20, 2009 at 3:44 PM, Lin Wj removed_email_address@domain.invalid wrote:

i am using hpricot to parse xml and place it into an object named ‘x’
[… ]

if i do a rescue exception , it catches it and thats the end of it , it
stops executing.

I don’t think there’s way to rescue an exception, ignore it and then
continue execution at the statement following the one that blew up.

Two alternatives you might consider:

  1. Create a method that does the if x.at … check and call that for
    each variable you need assigned. If you really prefer a rescue over
    the check the method could do that instead.

  2. How many variables are we talking about ? I’d consider more than a
    handful of them a code ‘smell’ and think about using a collection. If
    you were looping through a collection then begin/rescue/next would do
    what you’re talking about above.

Cheers,
lasitha