Forum: Ruby Exception Handling/Divide By Zero/NaN Done on One Line

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
John K. (Guest)
on 2007-01-24 17:34
(Received via mailing list)
I have the following:

a = (y != 0) ? (x/y) : 0

There must be a sexier way of doing this!  Any suggestions?

On a side note... how do we do exception handling on the same line as
statement?

a = x/y rescue 0

That does not work but does it make sense?  Is it because dividing by
zero does not throw an exception?

Thanks for your help! :-)

Your Friend,

John

--
John K.
removed_email_address@domain.invalid

http://www.kopanas.com
http://www.cusec.net
http://www.soen.info
Niko (Guest)
on 2007-01-24 17:48
(Received via mailing list)
a = begin
   x / y
rescue ZeroDivisionError
   0
end
unknown (Guest)
on 2007-01-24 17:53
(Received via mailing list)
On Thu, 25 Jan 2007, John K. wrote:

>
> That does not work but does it make sense?  Is it because dividing by
> zero does not throw an exception?
>
> Thanks for your help! :-)
>

works for me?

   harp:~ > ruby -e'  a = 42/0 rescue 42;  p a  '
   42

i think you're doing the right thing with

> a = x/y rescue 0

how doesn't it work?

regards.

-a
Rob B. (Guest)
on 2007-01-24 19:11
(Received via mailing list)
On Jan 24, 2007, at 10:52 AM, removed_email_address@domain.invalid wrote:

>>
>   harp:~ > ruby -e'  a = 42/0 rescue 42;  p a  '
> -a
> --
> we can deny everything, except that we have the possibility of
> being better.
> simply reflect on that.
> - the dalai lama

If you're not limited to Integers:

 >> 1/0
ZeroDivisionError: divided by 0
         from (irb):1:in `/'
         from (irb):1
 >> 1.0/0
=> Infinity
 >> 1/0.0
=> Infinity
 >> 0.0/0.0
=> NaN
 >>

If either x or y are Float, then dividing by zero isn't an exception.

You could force an exception if you want to get back to an Integer:

 >> (1.0/0).to_i
FloatDomainError: Infinity
         from (irb):7:in `to_i'
         from (irb):7
 >> (0.0/0.0).to_i
FloatDomainError: NaN
         from (irb):8:in `to_i'
         from (irb):8

-Rob

Rob B.    http://agileconsultingllc.com
removed_email_address@domain.invalid
John K. (Guest)
on 2007-01-24 20:47
(Received via mailing list)
I need to keep it as a float... that is my problemo :-(.

On 1/24/07, Rob B. <removed_email_address@domain.invalid> wrote:
> >>
> >
> >
>
>  >>
> FloatDomainError: NaN
>
--
John K.
removed_email_address@domain.invalid

http://www.kopanas.com
http://www.cusec.net
http://www.soen.info
Rob B. (Guest)
on 2007-01-25 00:34
(Received via mailing list)
On Jan 24, 2007, at 1:46 PM, John K. wrote:
>> >> There must be a sexier way of doing this!  Any suggestions?
>> >> Thanks for your help! :-)
>> >
>>
>>  >> 0.0/0.0
>>          from (irb):7
>
> I need to keep it as a float... that is my problemo :-(.
> --
> John K.
> removed_email_address@domain.invalid
>
> http://www.kopanas.com
> http://www.cusec.net
> http://www.soen.info

Perhaps...

a = x/y

a = 0.0 unless a.finite?

-Rob

Rob B.    http://agileconsultingllc.com
removed_email_address@domain.invalid
This topic is locked and can not be replied to.