重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

rubyで、raise句をエラーを再発生すると書いてありますが、なぜ、指定したエラーメッセージではないのでしょうか?
教えていただけると幸いです。まあ、エラーで終了しています。と書いてあるので、そういうものだと思ったらいいのでしょうか?私の誤解でしょうか?

質問者からの補足コメント

  • うーん・・・

    コマンドプロンプトが表示した
    "original error"
    「C:/samples/samples/08_03/raise.rb:3:in `<main>': original error (TypeError)

    raise TypeError, 'original error'
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^」
    についての、鉤括弧のエラーメッセージについての、疑問です。なぜ、このようなエラーメッセージが出てくるのでしょうか?
    raiseでは、「例外が発生する処理」と同じ例外を発生させる(raiseを引数無しの場合)
    と書いてあるので、鍵括弧の部分は、TypeErrorが表示されて、エラーで終了するという事でしょうか?
    教えていただけると幸いです。

    No.1の回答に寄せられた補足コメントです。 補足日時:2025/03/17 19:50
  • うーん・・・

    一応プログラムを載せておきます。
    begin
    # TypeError例外を発生
    raise TypeError, 'original error'
    rescue => e
    p e.message
    # 例外処理後に例外を再発生
     raise
    end
    というプログラムからの質問なのです。
    このプログラムのraiseについての、質問なのですが。
    コマンドプロンプトの実行結果は、NO.1の回答の補足に記述しました。
    教えていただけると幸いです。

      補足日時:2025/03/17 20:06
  • うーん・・・

    すみません。分かりにくかったですね。
    raise.rbの内容は、
    begin
    # TypeError例外を発生
    raise TypeError, 'original error'
    rescue => e
    p e.message
    # 例外処理後に例外を再発生
     raise
    end
    です。
    教えていただけると幸いです。
    もう少し分かりやすく書くべきでした。大変失礼しました。

    No.2の回答に寄せられた補足コメントです。 補足日時:2025/03/17 20:25
  • うーん・・・

    要するに、質問①raiseの引数が無い時は、TypeErrorのエラーメッセージが表示されるということですよね?
    質問②「3行目と同じ内容のエラーになります」というのは、どういう意味なのでしょうか?
    後、「補足した例外と同じ例外を発生させる」というのは、どういう事でしょうか?
    以上2点について、教えていただけると幸いです。

    No.3の回答に寄せられた補足コメントです。 補足日時:2025/03/17 22:34
  • うーん・・・

    質問の追加で、つまり、「rescue => e でeにエラーを格納しています。」の所は、「'original error'」と、「TypeErrorメッセージ」がeに格納されているということでしょうか?
    教えていただけると幸いです。

    No.4の回答に寄せられた補足コメントです。 補足日時:2025/03/17 23:08

A 回答 (5件)

>質問の追加で、つまり、「rescue => e でeにエラーを格納しています。

」の所は、「'original error'」と、「TypeErrorメッセージ」がeに格納されているということでしょうか?

はい、そうです。
    • good
    • 0

>質問①raiseの引数が無い時は、TypeErrorのエラーメッセージが表示されるということですよね?



回答:
はい、何故、TypeErrorのエラーメッセージが表示されるかいうと、
rescue => e でeにエラーを格納しています。
このeの中には補足したエラーが格納されています。
それは、3行目で発生させた raise TypeError, 'original error' のエラーです。
raiseの引数が無い時は、このeの内容で、エラーを再度発生させます。
従って、TypeErrorのエラーメッセージが表示されます。

>質問②「3行目と同じ内容のエラーになります」というのは、どういう意味なのでしょうか?

回答:質問①の回答で述べた通り、3行目で発生させた raise TypeError, 'original error' と同じエラー
という意味です。

>後、「補足した例外と同じ例外を発生させる」というのは、どういう事でしょうか?

回答:質問①の回答で回答済みです。
補足した例外はeであり、eの内容で例外を発生させるので、
「補足した例外と同じ例外を発生させる」ことになります。
この回答への補足あり
    • good
    • 0
この回答へのお礼

No.4です。
迅速な回答ありがとうございます。

お礼日時:2025/03/17 23:01

C:/samples/samples/08_03/raise.rb:3:in `<main>': original error (TypeError)


の個所は、raise を引数なしで、行った為、補足した例外と同じ例外を発生させるため、このようなメッセージになります。
(3行目と同じ内容のエラーになります)


raise TypeError, 'original error'
^^^^^^^^^^^^^^^^^^^^^^^^^^^
の個所については、申し訳ありませんが、
何故このエラーメッセージが表示されるのかはわかりませんでした。
(3行目でraiseした内容が表示されると思われます。)
この回答への補足あり
    • good
    • 0
この回答へのお礼

No.3です。
迅速な回答ありがとうございます。

お礼日時:2025/03/17 21:53

エラーの発生したスクリプト raise.rb の内容をそのまま、


提示していただけませんでしょうか。
この回答への補足あり
    • good
    • 0

「rubyで、raise句をエラーを再発生すると書いてありますが、なぜ、指定したエラーメッセージではないのでしょうか?」



上記の意味がよくわかりませんでした。具体的に書いていただけませんでしょうか。
この回答への補足あり
    • good
    • 0
この回答へのお礼

No.1です。
迅速な回答ありがとうございます。

お礼日時:2025/03/17 19:50

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

このQ&Aを見た人はこんなQ&Aも見ています