ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [R] try, tryCatch를 이용한 예외처리
    Data Analysis/R 2021. 8. 29. 19:04

    Table of Contents

    1. Introduction

    2. 에러를 무시하는 함수, try()

    3. 예외 처리하는 함수, tryCatch()

    4. Reference

     

    Introduction

    2020년이 어느 덧 1시간도 안남았다. 코딩은 하면 할수록 어렵고 복잡하다. 특정 케이스를 입력할 때 내가 만든 로직은 항상 에러가 발생하기 마련인데 이때, 어떻게 해야 에러를 무시하고 처리할 수 있을까? 예전 프로젝트를 수행하는 과정에서 try() 함수를 접한 적이 있었는데, 이걸 활용했을 때 조건문 없이 예외처리를 할 수 있다는 점에서 매력적으로 느꼈다. 그 이후 데이터 분석을 하기 위해 크롤러를 만드는 과정에서 활용했다. R에서 변수가 정의가 안된 이름을 입력하고 엔터를 칠 경우 에러가 발생하는 것을 본적 있을 것이다. 이때, try() 함수로 해당 변수를 감싸면 에러는 발생하나 다음 액션을 수행한다.

    일반적인 경우 try() 함수를 사용한 경우
    > Hello
    에러: 객체 'Hello'를 찾을 수 없습니다
    > {
    +   try(Hello)
    +   print("Goodbye 2020"
    +   print("Hello 2021")
    + }
    Error in try(Hello) : 객체 'Hello'를 찾을 수 없습니다
    [1] "Goodbye 2020"
    [1] "Hello 2021"

     

    에러를 무시하는 함수, try()

    다른 언어에도 예외 처리를 할 수 있는 함수인 try()와 tryCatch()가 있다. 에러를 무시하기 위한 함수 try()에 대해 조금 더 자세하게 살펴보면, 옵션에 expr ,silent ,outFile이 존재한다. expr은 우리가 수행하고자 하는 코딩을 넣어주면 된다. expr만 입력하고 try를 마무리 한다면 에러가 계속 나타난다. 이때, slient = TRUE 옵션을 넣어주면 조용하게 다음 액션을 수행하는 것을 확인할 수 있다.

    silent 옵션 없이 try() 함수를 사용한 경우 silent 옵션 값 적용한 try() 함수를 사용한 경우
    > {
    +   try(Hello)
    +   print("Goodbye 2020"
    +   print("Hello 2021")
    + }
    Error in try(Hello) : 객체 'Hello'를 찾을 수 없습니다
    [1] "Goodbye 2020" 
    [1] "Hello 2021"
    > {
    +   try(Hello)
    +   print("Goodbye 2020"
    +   print("Hello 2021")
    + }
    [1] "Goodbye 2020" 
    [1] "Hello 2021"

     

    예외 처리하는 함수, tryCatch()

    에러를 무시하는 것이 아니라 에러가 발생했을 경우에 특정 액션을 취하기 위해 사용하는 함수 tryCatch()이다. 즉 조건부 프로세스를 수행하기 위해서는 try()함수만으로는 부족하다는 것을 알 수 있다. 옵션을 살펴보면, expr, error, warning, finally가 존재하나. expr은 try와 동일하게 우리가 수행하고자 하는 코딩이다. 다만, error, warning은 error가 발생할때와 warning이 발생했을 때 수행하는 액션들이다. finally는 해당 액션이 발생하고 나서 수행할 예외 처리 함수에 해당한다. error 또는 warning이 발생할 경우 finally를 수행하는 것이다. 이를 활용하면 코딩하는데 처리가 한 단계 도움이 될 것이다.

    일반적인 경우 tryCatch() 함수를 사용한 경우
    > Hello
    에러: 객체 'Hello'를 찾을 수 없습니다
    > tryCatch(expr = kkkk,
    +             error = function(e) print("Error"),
    +             warning = function(e) print("Warning"),
    +             finally = print("Next Action : Hello 2021"))
    [1] "Error"
    [1] "Error/Warning Action : Hello 2021"

     

    Reference

    try, "www.rdocumentation.org/packages/base/versions/3.6.2/topics/try"

    tryCatch, "www.rdocumentation.org/packages/R.oo/versions/1.2.7/topics/trycatch"

     

    댓글

Designed by Tistory.