質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

2回答

583閲覧

RubyでWindowsコマンドエラーの例外処理が発動しない

d04062

総合スコア111

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2020/08/11 08:55

下記のように、windowsコマンドを打ち、

ruby

1begin 2 # ここにraise を記載すればrescue可能です 3 system("rasdial 〇〇◯") 4rescue => e 5 p "例外処理" 6 p e 7 retry 8end

コマンドがエラーを返してきた場合、
「リモート アクセス エラー 651 - モデム (またはほかの接続デバイス) からエラーが返されました。」とターミナルに表示されますが、
「p "例外処理"」「retry」は実行されずに停止し、

おそらくrescueできていないようです。

「raise」を記載すれば、rescue可能です。

何か認識違いがありますでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

通常、system()では例外は発生しません。
起動したコマンドが非ゼロの完了コードで終了した場合に、例外を投げて欲しいなら、オプションで指定します。

Ruby

1system("xxxxxx", exception: true)

が、完了コードゼロになるまで再実行したいのであれば、ダイレクトに、

Ruby

1until system("xxxxx") 2 p "リトライ" 3end

と書くのがいいと思います。

投稿2020/08/11 09:17

otn

総合スコア85901

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

d04062

2020/08/11 12:23

こういったやり方もあるのですね ありがとうございます。
guest

0

ベストアンサー

おそらくrescueできていないようです。

違います。例外が起きていません

Kernel.#systemは、あえてexception: trueの指定をした場合だけ例外が発生します(るりま)。

そして、実行先のプログラムが異常終了した場合でも、Ruby側でそれを異常だと検知できない場合もありえます。

投稿2020/08/11 09:01

maisumakun

総合スコア146018

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

d04062

2020/08/11 09:12

ありがとうございます。 バッチリでした。rasdialはエラー検知が可能なようです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問