e$B!!$5$5$@$G$9!#e(B
3.times{
Thread.new{
begin
sleep
ensure
p :foo # (A)
raise # (B)
end
}
}
e$B!!$3$s$J%W%m%0%i%`$r<B9T$9$k$H!"e(B(A) e$B$K$h$j!"e(B:foo
e$B$,e(B3e$B2sI=<($5$l$^$9!#e(B
e$B$7$+$7!"e(B(B) e$B$K$h$ke(B raise e$B$OL5;k$5$l$^$9!#e(B
e$B!!L5;k$5$l$k$N$OL5;k$5$l$k$N$G$$$$$N$G$9$,!"7Y9p$J$j%a%C%;!<%8$J$j$re(B
e$BI=<($7$J$/$F$b$$$$$b$s$G$7$g$&$+!Je(Bruby -d
e$B$G$OI=<($9$k$1$I!K!#$H$$$&e(B
e$B$+!“e(BPython
e$B$@$HI=<($7$F$$$?$N$G5$$K$J$j$^$7$?!#$7$+$b!”?F@Z$K$b!V$3e(B
e$B$N%(%i!<$OL5;k$9$k$h!<!W$H$$$&7Y9pIU$-!#e(B
def foo():
try:
yield 1
yield 2
finally:
raise RuntimeError
f = foo()
f.next()
f = foo()
f.next()
#=>
Exception exceptions.RuntimeError: RuntimeError() in <generator
object at 0x7ff2678c> ignored
Exception exceptions.RuntimeError: RuntimeError() in <generator
object at 0x7ff269ac> ignored