47299


例外処理について質問させていただきます。

計算式

[code]

    a = d + f + g
    b = h + j
    c=a+b
    
[/code]

上の計算をする場合d,f,g,h,jは変数で、
aの計算でエラーが出た時（例えばgでNoMethodError）にはaの計算はそこで終了(fで終了)し、b・cに進みたいのですが例外処理のrescue部分に何を書いていいのか思いつきません。

何かいい方法がありましたら教えていただきたいです。


CC BY-SA 4.0
2018-08-07T00:37:13.310
47294
2018-08-07T02:57:36.200
29428
question
ruby
例外処理で次の工程に進む方法


> 例外処理のrescue部分に何を書いていいのか思いつきません。

以下の`begin 〜 rescue; end`のように何も書かなければ良いと思います。

[code]

    a = d = f= h = j = 0       # 実行可能とするため、g以外は初期化しておく
    begin
      a = d + f + g
    rescue; end                     # 例外を無視
    b = h + j
    c = a + b
    
[/code]

参考情報:

  * [How to “ignore” caught exceptions?](https://stackoverflow.com/questions/13556327/how-to-ignore-caught-exceptions)


CC BY-SA 4.0
2018-08-07T02:08:01.567
47299
2018-08-07T02:08:01.567
29553
47294
answer


例外のあるプログラミング言語において、基本的に、プログラミングのミスに起因する例外と、そうでない例外(ファイルが壊れてた、ネットワークがつながらなかった、など)があります。

NoMethodError
は、基本的にプログラム記述のミスに起因する例外です。この処理が、メソッドの中のどの部分で表れているのか分からないので、推測になりますが、たとえば:

  * if 文でのみ g の変数への代入が行われている。条件次第では g への代入が行われない場合がある 
    * => g をメソッドの最初に 0 で初期化しておきましょう。
  * method_missing を用いたような、利用可能なメソッドが動的に変化するオブジェクトの中での処理中のできごとである。 
    * => `respond_to? :g` で、 g というメソッドが存在するかどうかチェックする

など、基本的にプログラム側で対処した方がベターです。


CC BY-SA 4.0
2018-08-07T02:57:36.200
47307
2018-08-07T02:57:36.200
754
47294
answer