예외 처리 기반 실행

5999 단어 Ruby

입문


이번에 제가 예외를 다시 배웠어요.
잊지 않기 위해 기술하다.
조금씩 이해하는 건 이번이 처음이야

예외 처리


코드를 실행할 때 오류가 발생했을 때 처리합니다.
원인을 조사하기 쉽다는 등 장점이 있다.

사용할 주요 기능

  • begin은 예외가 발생할 수 있는 코드를 지정하여 처리 문제를 검색합니다
  • rescue는 문제가 발생했을 때 대응하는 내용을 기술한다
  • raise는 의도적으로 오류가 발생했을 때 기술한다
  • ensure는 오류가 발생하더라도 실행합니다
  • 간단한 것을 쓰다


    절차를 이해하기 쉽도록'puts'로 번호를 매깁니다.
    puts 1
    begin           # エラーが起きそうなところをbeginで囲む
      number = 0
      answer = 100 / number
      puts 2       # ↓ エラーが起きたら対応する内容をrescueに記述
    rescue ZeroDivisionError => e    # e変数に発生した例外を表すオブジェクトが代入
      p e           #=> <ZeroDivisionError: divided by 0> 
    ensure          # エラーが発生しても実行する
      puts 3
    end
    puts 4
    
    # 動きは 1 → 3 → 4 
    
    (변수가'e'가 아니어도 상관없다.)
    이상이 발생하면 즉시 처리하지 않고rescue 처리로 넘어갑니다.**例外ハンドラ** 이상한rescue 블록에 대응하는 부분
    rescue의 출력도 다음과 같은 출력이 있습니다.("p e "장소
    묘사
    컨텐트 내보내기
    p "0 으로 나누면 안 됨"(출력하려는 내용 기술)
    "0으로 나누면 안 돼요".
    p e.class
    ZeroDivisionError
    p e.class.superclass
    StandardError
    p e.message
    "divided by 0"
    p e.backtrace
    ["exception.rb:23:in /'", "exception.rb:23:in '"]
    stdERR.puts'0이야!!!'
    '0이다!!!'(표준 출력으로 내보내기 오류)
    이렇게 기술하면 각양각색의 정보를 볼 수 있다.

    이상 처리 동작을 관찰하다


    호출 시 이상을 포착할 수 있습니다.
    def test_exception(number)
      puts 2
      begin
        puts 3
        answer = 100 / number      # ここで例外が発生!!
        return answer
        puts 4
      rescue ZeroDivisionError => e
        puts 5
        raise e
      end
      puts 6
    end
    
    puts 1
    
      begin
        answer = test_exception(0)
        puts 7
      rescue ZeroDivisionError => e
        puts 8
        p e               # 最後に実行される
      end
    
    # 動きは 1 → 2 → 3 → 5 → 8 → #<ZeroDivisionError: divided by 0>
    
    발생한 이상은 자동으로 호출자에게 전달됩니다.(반환)
    rescue 블록에서raise를 사용하여 고의로 발생하고 발생하는 호출자로 되돌릴 수 있습니다.

    예외 처리 상속 관계


    예외적인 반이 많다.

    여기에 상세한 내용이 있다이상 클래스 참조
    참고: 이토 순일.전문가를 대상으로 하는 루비 입문 언어 규격부터 테스트 구동 개발·디버깅 기술까지

    예제


    rescue 부분을 설명할 때 주의해야 할 것이 있습니다.
    begin
        number = 0
        answer = 100 / number
    rescue Exception => e
        puts "予期せぬエラーが発生しました"
        p e
    rescue ZeroDivisionError => e
        puts "0ですよ!!"
        p e
    end
    
    #=> 予期せぬエラーが発生しました
    #=> #<ZeroDivisionError: divided by 0>
    
    Exception은 모든 초클래스 (부류) 이기 때문에 두 번째rescue를 실행하지 않고 오류를 포착하여 첫 번째 Exception의 오류 문장을 출력합니다.
    ...그래서 원하는 글을 출력하고 싶을 때.
    rescue 순서 주의

    총결산


    이번에는 이런 느낌으로 공부했어요.
    다음에 좀 더 깊이 파고 싶어요.

    좋은 웹페이지 즐겨찾기