2017-03-06 12 views
-1

ruby​​で以下のコードを実行しました。Rubyで、例外を文字列と連結すると例外がスローされます

コード:

def doCalc 
    begin 
     print("Enter a number: ") 
     aNum = gets().chomp() 
     result = 100/aNum.to_i 
    rescue Exception => e  
     result = 0 
     puts("Error: " + e + "\nPlease try again.") 
     retry # retry on exception 
    else 
     msg = "Result = #{result}" 
    ensure 
     msg = "You entered '#{aNum}'. " + msg 
    end 
    return msg 
end 


puts(doCalc) 

取得エラー:私は、このエラー処理コードがどのように機能するかを確認したかったので

retry.rb:15:in +': can't convert nil into String (TypeError) from retry.rb:15:in ensure in doCalc' from retry.rb:15:in doCalc' from retry.rb:21:in '

は私がコンソールに0を入力します。基本的に作業を確認したい リトライを再試行します。私はどのように作品を再試行理解したが、それは例外を割り当てられている「E」は、私は、ライン#15を変更するかのような場合が望めないnilの言うように、このエラーは私を混乱させる:

puts e 

その後、エラーが来ることはありません。実際にそれは印刷されます:

divided by 0

私は経験豊富なJavaですが、Rubyの新機能です。私はここで何が欠けていますか?

+1

、あなたが行っていたはずですが、以下のようなものです

msgnilの種類を残して、rescueブロックに、後でensureブロックに行ってきました#{aNum} '。msgstr "ここにはmsgがないので+ msg?特に、トレースをスタックすると、確実に問題が確実にブロックされます。 – engineersmnky

+0

最後の注意として、putsはObjectのto_sを呼び出します。この場合、Stringアセンブリの一部として 'e.to_s'を追加する必要があります。 – engineersmnky

+0

エラーメッセージは意味をなさないものです。あなたのコードには21行もありませんので、どうすれば21行目を参照することができますか?投稿したエラーメッセージと投稿したコードが一緒に属していないことは明らかです。残念ながら、コードとエラーメッセージが何であるかわからない場合は、あなたを助けるために何もできません。 –

答えて

0

0を入力すると、divide by 0の例外がありました。実行は、それがこの部分 `MSG =「あなたは"入力されていないのですあなたは確か

def doCalc 
    begin 
     print("Enter a number: ") 
     aNum = gets().chomp() 
     result = 100/aNum.to_i 
    rescue Exception => e 
     result = 0 
     msg = "Error: #{e.message}" 
     puts("#{msg} \n Please try again.") 
     retry # retry on exception 
    else 
     msg = "Result = #{result}" 
    ensure 
     msg = "You entered '#{aNum}'. #{msg}" 
    end 
    return msg 
end 


puts(doCalc) 
+0

@nanosoftは役に立ちましたか? –

関連する問題