예외 처리.
class ExceptionTest
  def test
    begin
      # 0での除算でエラーを発生させる
      1/0
    rescue ZeroDivisionError => ex
      puts "ZeroDivisionError"
    end
  end
end
obj = ExceptionTest.new
# 例外発生
obj.test # => ZeroDivisionError
그래서 1부터 다시 한다.
main.rb
begin
  1 / 0
rescue
  puts "何か問題が発生しました。"
end
main.rb
begin
  1 / 0
rescue
  puts "何か問題が発生しました。"
end
puts 'ok'
#=> 何か問題が発生しました。
#=> ok
begin과rescue를 사용하지 않으면 오류로 인해 멈출 수 있습니다.
main.rb
1 / 0
puts 'ok'
#=> main.rb:1:in `/': divided by 0 (ZeroDivisionError)
#=>     from main.rb:1:in `<main>'
다음은 흔히 볼 수 있는 이거.
main.rb
begin
  1 / 0
rescue => e
  puts "何か問題が発生しました。"
  p e
end
puts 'ok'
#=> 何か問題が発生しました。
#=> #<ZeroDivisionError: divided by 0>
#=> ok
그럼 이 부분에 관해서 재미있는 루비(Rubby)를 보세요. 위에'예외 대상을 변수에 대입하라'고 쓰여 있습니다.그리고 예외 대상은 방법이 있는 것 같습니다.
main.rb
begin
  1 / 0
rescue => e
  p e.class
  p e.message
  p e.backtrace
end
#=> ZeroDivisionError
#=> "divided by 0"
#=> ["main.rb:2:in `/'", "main.rb:2:in `<main>'"]
참고서를 보니 예외반이 많았다.
 
 내장 라이브러리
※ 계속
다음은 참고 사이트의 이 부분을 찾아보세요.
rescue ZeroDivisionError => ex
main.rb
begin
  1 / 0
rescue ZeroDivisionError
  puts "対象の例外やー。"
end
#=> 対象の例外やー。
그러나 매개변수가 부족한 오류이므로 ArgumentError를 지정해야 합니다.
main.rb
def full_name(firstname, lastname)
  puts firstname + lastname
end
begin
  full_name("taro")
rescue ZeroDivisionError
  puts "対象の例外やー。"
end
#=> main.rb:1:in `full_name': wrong number of arguments (1 for 2) (ArgumentError)
#=>     from main.rb:6:in `<main>'
def full_name(firstname, lastname)
  puts firstname + lastname
end
begin
  full_name("taro")
rescue ArgumentError
  puts "対象の例外やー。"
end
#=> 対象の例外やー。
class ExceptionTest
  def test
    begin
      # 0での除算でエラーを発生させる
      1/0
    rescue StandardError => ex
      puts "StandardError"
    rescue ZeroDivisionError => ex
      puts "ZeroDivisionError"
    end
  end
end
obj = ExceptionTest.new
# 例外発生
obj.test # => StandardError
흔하지만 잘 이해되지 않는 레이스를 살펴보자.
예외가 발생하다.첫 번째 형식은 이전의 예외가 다시 발생할 것이다.두 번째 형식에서는 매개변수가 문자열인 경우 런타임에rror 예외가 발생하여 문자열을 메시지로 보냅니다.
레이스에 예외가 생길 것 같아요.특별히 지정하지 않으면 RuntimeError가 생성됩니다.
main.rb
raise "RunTimeError??"
#=> main.rb:1:in `<main>': RunTimeError?? (RuntimeError)
raise ArgumentError
#=> main.rb:1:in `<main>': ArgumentError (ArgumentError)
raise ArgumentError, "ArgumentErrorだよー"
#=> main.rb:1:in `<main>': ArgumentErrorだよー (ArgumentError)
그나저나 RunTime Error
특정 예외 클래스에 속하지 않는 오류가 발생할 수 있습니다.Kerne.#RuntimeError는 레이스에 예외 클래스가 지정되지 않은 경우에도 발생합니다.
이런 거.여기까지 생각났어요. raise와if문이 연결되었어요.
main.rb
def kufuku_gauge(energy)
   true if energy > 100
end
def eating_dinner
  raise "既に満腹!" if kufuku_gauge(120)
  puts "食事の時間だ!"
end
eating_dinner
#=> main.rb:6:in `eating_dinner': 既に満腹! (RuntimeError)
#=> from main.rb:10:in `<main>'
이 지경에 이르렀으니 나도 원 보도의 뜻을 이해할 수 있게 되었다.
Reference
이 문제에 관하여(예외 처리.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/murata0705/items/6ae346bd04197fb2e36a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)