Trapping error not caught by rescue Exception -- How to?

Hi,

The fourth data line in the program below hangs rather than submitting
to the rescue clause. How can I trap that kind of error?

I'm running WinXP-Pro/SP2, Ruby 1.8.2-15, Rails 1.1.6, MySQL
5.0.15-nt, SciTE 1.59

TIA,
Richard

=== code start ===
begin
  DATA.each do |line|
    var, expr, excess = line.chomp.split(/=/, 3)
    var.strip!; expr.strip!
    puts "expr=" + expr + ", expr.class=" +expr.class.to_s
    puts "eval(expr)=" + eval(expr).to_s
  end
rescue Exception => eMsg
  puts "ERROR: " + eMsg
  retry
end

__END__
a = 5**2 =# 25
b =date =# undefined local variable or method `date' for
main:Object
c = y =# undefined local variable or method `y' for main:Object
c =`date` =# (ruby hangs; Ctrl-C kills it)
=== code end ===

Ruby doesn't hang when I run that code.

This is the output:
daniel@daniel-desktop:~$ ruby /tmp/tmp.rb
expr=5**2, expr.class=String
eval(expr)=25
expr=date, expr.class=String
ERROR: undefined local variable or method `date' for main:Object
ERROR: undefined method `strip!' for nil:NilClass
expr=y, expr.class=String
ERROR: undefined local variable or method `y' for main:Object
expr=`date`, expr.class=String
eval(expr)=Sat Dec 16 22:01:37 EST 2006

Richard wrote:

···

Hi,

The fourth data line in the program below hangs rather than submitting
to the rescue clause. How can I trap that kind of error?

I'm running WinXP-Pro/SP2, Ruby 1.8.2-15, Rails 1.1.6, MySQL
5.0.15-nt, SciTE 1.59

TIA,
Richard

=== code start ===
begin
  DATA.each do |line|
    var, expr, excess = line.chomp.split(/=/, 3)
    var.strip!; expr.strip!
    puts "expr=" + expr + ", expr.class=" +expr.class.to_s
    puts "eval(expr)=" + eval(expr).to_s
  end
rescue Exception => eMsg
  puts "ERROR: " + eMsg
  retry
end

__END__
a = 5**2 =# 25
b =date =# undefined local variable or method `date' for
main:Object
c = y =# undefined local variable or method `y' for main:Object
c =`date` =# (ruby hangs; Ctrl-C kills it)
=== code end ===

Hi Daniel,

Thanks for your results. I suspect you were running on Uni*. I was
running in SciTE over WindowsXP.

When I ran the program in a Command window, I saw what the problem is:
in Windows, the date command waits for keyboard input specifying a new
system date. That wasn't apparent when I was running under SciTE.

So, all's well in my Ruby sandbox.

Regards,
Richard

Daniel Finnie wrote:

···

Ruby doesn't hang when I run that code.

This is the output:
daniel@daniel-desktop:~$ ruby /tmp/tmp.rb
expr=5**2, expr.class=String
eval(expr)=25
expr=date, expr.class=String
ERROR: undefined local variable or method `date' for main:Object
ERROR: undefined method `strip!' for nil:NilClass
expr=y, expr.class=String
ERROR: undefined local variable or method `y' for main:Object
expr=`date`, expr.class=String
eval(expr)=Sat Dec 16 22:01:37 EST 2006

Richard wrote:
> Hi,
>
> The fourth data line in the program below hangs rather than submitting
> to the rescue clause. How can I trap that kind of error?
>
> I'm running WinXP-Pro/SP2, Ruby 1.8.2-15, Rails 1.1.6, MySQL
> 5.0.15-nt, SciTE 1.59
>
> TIA,
> Richard
>
> === code start ===
> begin
> DATA.each do |line|
> var, expr, excess = line.chomp.split(/=/, 3)
> var.strip!; expr.strip!
> puts "expr=" + expr + ", expr.class=" +expr.class.to_s
> puts "eval(expr)=" + eval(expr).to_s
> end
> rescue Exception => eMsg
> puts "ERROR: " + eMsg
> retry
> end
>
> __END__
> a = 5**2 =# 25
> b =date =# undefined local variable or method `date' for
> main:Object
> c = y =# undefined local variable or method `y' for main:Object
> c =`date` =# (ruby hangs; Ctrl-C kills it)
> === code end ===
>
>
>