対象: 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]
|