|
|||||
|
対象: evalのSyntaxErrorがrescue節で捕捉できないevalは例外スローしそうだからbegin endで囲っておいたのにSyntaxErrorで異常終了してしまったことはないだろうか。きっとそれはrescue節でerror_typeを指定しなかったからだ。rescue節でerror_typeを指定しないとStandardErrorを指定したものとみなされる。
[mobile@localhost ruby]$ jruby eval_exception.rb
SyntaxError: (eval):1: unterminated string meets end of file3 */ 3
^
eval at org/jruby/RubyKernel.java:1083
(root) at eval_exception.rb:2
一方、evalで文字列をパースしたときの例外SyntaxErrorはStandardErrorのサブクラスではない。それ故、SyntaxErrorがスローされたとき、rescue節で捕捉されずに異常終了してしまったのだ。従って、SyntaxErrorをrescue節で捕捉するにはerror_typeでExceptionを指定するだけで良い。
begin
eval("3 */ 3")
rescue Exception
print "Caught! Exception\n"
end
(2013/11/19)
Copyright(C) 2004-2014 モバイル開発系(K) All rights reserved.
[Home]
|
|||||