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)
取得エラー:私は、このエラー処理コードがどのように機能するかを確認したかったので
は私がコンソールに0を入力します。基本的に作業を確認したい リトライを再試行します。私はどのように作品を再試行理解したが、それは例外を割り当てられている「E」は、私は、ライン#15を変更するかのような場合が望めないnilの言うように、このエラーは私を混乱させる:retry.rb:15:in
+': can't convert nil into String (TypeError) from retry.rb:15:in
ensure in doCalc' from retry.rb:15:indoCalc' from retry.rb:21:in
'
puts e
その後、エラーが来ることはありません。実際にそれは印刷されます:
divided by 0
私は経験豊富なJavaですが、Rubyの新機能です。私はここで何が欠けていますか?
、あなたが行っていたはずですが、以下のようなものです
、
msg
nil
の種類を残して、rescue
ブロックに、後でensure
ブロックに行ってきました#{aNum} '。msgstr "ここにはmsgがないので+ msg?特に、トレースをスタックすると、確実に問題が確実にブロックされます。 – engineersmnky最後の注意として、putsはObjectのto_sを呼び出します。この場合、Stringアセンブリの一部として 'e.to_s'を追加する必要があります。 – engineersmnky
エラーメッセージは意味をなさないものです。あなたのコードには21行もありませんので、どうすれば21行目を参照することができますか?投稿したエラーメッセージと投稿したコードが一緒に属していないことは明らかです。残念ながら、コードとエラーメッセージが何であるかわからない場合は、あなたを助けるために何もできません。 –