예외 처리.
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
이것은 매우 알기 쉬워서 자주 사용한다.begin과rescue 사이의 처리에 문제가 발생하면 오류로 인해 멈추지 않고rescue와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>'
첫 번째 줄에 '0 파열 없음' 오류가 있어서 'ok' 을 표시하지 않습니다.다음은 흔히 볼 수 있는 이거.
main.rb
begin
1 / 0
rescue => e
puts "何か問題が発生しました。"
p e
end
puts 'ok'
#=> 何か問題が発生しました。
#=> #<ZeroDivisionError: divided by 0>
#=> ok
이것은 잘못된 내용을 e에 넣으세요.Begin~rescue 사이의 처리에서 Zero Division Error가 발생한 것 같습니다.class ZeroDivisionError 그럼 이 부분에 관해서 재미있는 루비(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
rescue 다음에 반을 지정하면 그 예외만 rescue인 것 같습니다.main.rb
begin
1 / 0
rescue ZeroDivisionError
puts "対象の例外やー。"
end
#=> 対象の例外やー。
0으로 나누면 오류는 Zero Division Error이므로 이건 제대로 행동해야 한다.그러나 매개변수가 부족한 오류이므로 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>'
main.rbdef 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
StandardError는 ZeroDivisionError의 부류이기 때문에 StandardError와 ZeroDivisionError는 모두 대상의 예외로 0의 제법 오류를 포착할 수 있다.이 상황을 검증했을까요?흔하지만 잘 이해되지 않는 레이스를 살펴보자.
예외가 발생하다.첫 번째 형식은 이전의 예외가 다시 발생할 것이다.두 번째 형식에서는 매개변수가 문자열인 경우 런타임에rror 예외가 발생하여 문자열을 메시지로 보냅니다.
레이스에 예외가 생길 것 같아요.특별히 지정하지 않으면 RuntimeError가 생성됩니다.
main.rb
raise "RunTimeError??"
#=> main.rb:1:in `<main>': RunTimeError?? (RuntimeError)
main.rbraise ArgumentError
#=> main.rb:1:in `<main>': ArgumentError (ArgumentError)
main.rbraise 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.)