初めての店舗開業を成功させよう>>

rubyでevalを実行した時、その文が、構文的に正しくない場合、実行時にエラーになりますが、これを、検知する方法はあるでしょうか。
begin
eval("実行対象の文(構文エラーの可能性有り)")
resucue
ここが実行されることを期待したが、ここに制御が移りませんでした。
end

このQ&Aに関連する最新のQ&A

A 回答 (2件)

ああ、すみません。

質問文に構文的に正しくない場合ってありますね。

SyntaxErrorはクラスを指定しないrescueではできません。

Rubyリファレンスマニュアル - 制御構造
http://www.ruby-lang.org/ja/man/index.cgi?cmd=vi …
Rubyリファレンスマニュアル - 組み込みクラス/モジュール/例外クラス
http://www.ruby-lang.org/ja/man/index.cgi?cmd=vi …

irb(main):001:0> begin
irb(main):002:1* eval("a=(1/0")
irb(main):003:1> rescue SyntaxError
irb(main):004:1> puts "構文エラーがありました"
irb(main):005:1> end
構文エラーがありました
=> nil

ということで適切なクラスを指定して捕捉してください。
    • good
    • 0
この回答へのお礼

rescue SyntaxError
を指定して、望んだ結果を得ることが出来ました。
ありがとうございました。

お礼日時:2007/11/26 15:12

> resucue


スペルミスしてます。

irb(main):001:0> begin
irb(main):002:1* eval("1/0")
irb(main):003:1> resucue
irb(main):004:1> puts "error"
irb(main):005:1> end
ZeroDivisionError: (eval):1:in `irb_binding': divided by 0
from (irb):2:in `eval'
from (irb):2:in `eval'
from (irb):2
from c:/ruby/lib/ruby/1.9/irb.rb:150:in `block (2 levels) in eval_input'

from c:/ruby/lib/ruby/1.9/irb.rb:259:in `signal_status'
from c:/ruby/lib/ruby/1.9/irb.rb:147:in `block in eval_input'
from c:/ruby/lib/ruby/1.9/irb.rb:146:in `eval_input'
from c:/ruby/lib/ruby/1.9/irb.rb:70:in `block in start'
from c:/ruby/lib/ruby/1.9/irb.rb:69:in `catch'
from c:/ruby/lib/ruby/1.9/irb.rb:69:in `start'
from c:/ruby/bin/irb.bat:21:in `<main>'
irb(main):006:0> begin
irb(main):007:1* eval("1/0")
irb(main):008:1> rescue
irb(main):009:1> puts "error"
irb(main):010:1> end
error
=> nil
irb(main):011:0>
    • good
    • 0
この回答へのお礼

>> resucue
>スペルミスしてます。
失礼しました。
rescue に正しく修正して確認しました。
検知したいのは、 eval("1/0")ではなく
str = "a=(1/0"
eval(str)
としたときに、これをシンタックスエラーとして検知したいために
rescue のところを実行させたいということです。
上記のstrは "(" があるためシンタックスエラーとなります。
このケースでrescue以下の部分を実行させる方法があるかというのが
質問の趣旨です。

上記を実行すると、
rescueが実行されずに、
以下のエラーメッセージが標準エラーに出力されてしまいます。
(eval):1: syntax error
a=(1/0

お礼日時:2007/11/26 14:39

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QrubyでC言語のexitにあたる構文は?

現在、C言語のプログラムをrubyに書き換えています。

そこで、C言語のexitに当たるrubyの構文、もしくは、
文法が見つからず、困ってます。
(ある条件になったら、強制的にrubyの実行を
 停止させたいのですが、、、)
(__END__ですか?)

詳しい方が居ましたら、ご指南下さい。

Aベストアンサー

#2です。
>exit のあとの数字について詳しく知らないので、
>教えていただけたら幸いです。
exitのあとの数字は終了コードといって、どのような状態で、このプログラムが終了したかを、呼び出しもとに伝える為のものです。
この値は、呼び出し元と、呼び出される側(このプログラム)との決め毎なので、どのようにきめてもかまわないのですが、
ふつうは、終了コード:0で終了したときが、正常終了にします。
それ以外の値は、異常終了を示す値にします。

この終了コードは、なにかのサブルーチンを作ったときの、戻り値に似ています。
サブルーチンの戻り値は、呼び出しもとと呼び出される側(サブルーチン側)とで、自由にきめて良いのですが、
通常は、正常:0、以外は、それなりの異常にしますよね。


人気Q&Aランキング

おすすめ情報