Ruby에서 예외 처리

2020-12-16 hit count image

Ruby에서 예상치 못한 에러가 발생하였을 때, 프로그램이 종료되지 않게 하기 위해 예외 처리를 하는 방법에 대해서 알아봅시다.

개요

프로그램을 작성하다보면, 우리가 예성하지 못한 에러가 발생하기도 합니다. 이런 에러가 발생을 하면, 프로그램이 의도치 않게 종료됩니다. 예외 처리는 이렇게 우리가 예상치 못한 에러가 발생하였을 때, 프로그램이 종료되지 않게 해 줍니다.

그럼 Ruby에서 예외 처리를 하는 방법에 대해서 살펴봅시다.

예외 처리

보통 다른 언어에서는 try-catch 구문을 사용하여 예외 처리를 합니다. 하지만 Ruby에서 예외 처리를 하기 위해서는 begin-rescue-end 구문을 사용합니다.

begin
  # 예외가 발생할 만한 부분
rescue
  # 예외 처리
else
  # 예외가 발생하지 않은 경우의 처리
ensure
  # 마지막으로 실행할 처리
end

위와 같이 beginrescue 사이에는 우리가 예상치 못한 에러가 발생할 만한 부분을 작성합니다. 이곳에서 예외가 발생하면 rescueelse 사이에 구문이 실행되고, 마지막으로 ensureend 구문이 실행됩니다.

만약 beginrescue사이에서 에러가 발생하지 않는 다면, elseensure 사이에 구문과 ensureend사이에 구문이 실행됩니다.

디버깅 변수

Ruby에서는 에러가 발생하여 예외 처리 부분이 실행되면, 다음과 같은 변수가 자동 할당됩니다.

  • $!₩: 마지막으로 일어난 예외와 관련된 정보
  • $@: 마지막으로 일어난 예외의 위치와 관련된 정보

예제

다음과 같이 예외 처리를 사용할 수 있습니다.

puts "[Search a file with file name]"
begin
  print "file name: "
  file_name = gets.chop
  puts File.ftype(file_name)
rescue
  puts "Error!!"
  puts "#{$@}"
  puts "#{$!}"
end

위에 예제를 조금 자세히 살펴봅시다.

file_name = gets.chop

검색하고자 하는 파일 이름을 gets 메서드를 통해 사용자로부터 입력받습니다. 입력받은 문자열을 chop을 사용하여 개행 문자(\n)를 제거합니다.

puts File.ftype(file_name)

사용자로 부터 입력 받은 파일 이름을 Fileftype 메서드를 통해 파일 타입을 가져옵니다.

[Search a file with file name]
file name: example.txt
file

실제로 존재하는 파일을 입력한다면 위와 같이 파일의 종류를 반환합니다. 하지만, 존재하지 않는 파일의 이름을 입력한다면 에러가 발생합니다.

rescue
  puts "Error!!"
  puts "#{$@}"
  puts "#{$!}"
end

에러가 발생한다면, rescueend 사이에 구문이 실행되며 화면에는 Error!!라는 문자가 표시되며, 발생한 위치에 대한 정보($@)와 에러에 대한 정보($!)가 표시됩니다.

Error!!
No such file or directory @ rb_file_s_ftype - test
["./index.rb:5:in `ftype'", "./index.rb:5:in `<main>'"]

완료

이것으로 Ruby에서 예외 처리를 사용하는 방법에 대해서 알아보았습니다. 이제 begin-rescue를 사용하여 프로그램이 의도치 않게 종료되는 것을 방지해 보시기 바랍니다.

제 블로그가 도움이 되셨나요? 하단의 댓글을 달아주시면 저에게 큰 힘이 됩니다!

앱 홍보

책 홍보

블로그를 운영하면서 좋은 기회가 생겨 책을 출판하게 되었습니다.

아래 링크를 통해 제가 쓴 책을 구매하실 수 있습니다.
많은 분들에게 도움이 되면 좋겠네요.

스무디 한 잔 마시며 끝내는 React Native, 비제이퍼블릭
스무디 한 잔 마시며 끝내는 리액트 + TDD, 비제이퍼블릭
[심통]현장에서 바로 써먹는 리액트 with 타입스크립트 : 리액트와 스토리북으로 배우는 컴포넌트 주도 개발, 심통
Posts