Computer >> 컴퓨터 >  >> 프로그램 작성 >> Ruby

Ruby에서 "시작" 및 "구조" 키워드를 사용하는 방법

Ruby의 일반적인 문제는 기술적인 용어로 "예외"라고 하는 오류 메시지가 표시된다는 것입니다.

이러한 예외는 예상될 수 있습니다. , 때로는 사용할 수 있지만 다른 파일에는 없는 파일 또는 일부 제한으로 인해 일시적으로만 사용할 수 있는 API 또는 예기치 않은 .

오늘은 예상되는 오류를 관리하는 방법을 배웁니다.

어떻게?

자, Ruby에서 오류 조건을 처리하는 데 사용되는 두 가지 중요한 키워드인 "시작"과 "구조"를 소개하겠습니다.

어떻게 작동합니까?

먼저 무엇인가를 이해해야 합니다.

Ruby 프로그램이 실행되는 동안 여러 지점에서 오류가 발생할 수 있습니다.

예: :

  • 존재하지 않는 파일을 읽으려고 합니다.
  • 숫자를 0으로 나누기.
  • 사용 중인 웹 서버에 오래된 SSL 인증서가 있습니다.

오류가 발생하면... Ruby는 즉시 충돌하지 않습니다!

오류에서 복구할 수 있는 기회를 얻습니다. . 이를 "예외 처리"라고 합니다.

Ruby는 코드에서 오류 복구를 구현하기 위한 몇 가지 키워드를 제공합니다. 이 키워드는 begin입니다. &rescue .

사용법을 알아봅시다!

루비 예외 처리 방법

이러한 예외를 어떻게 처리합니까?

예외를 발생시키는 코드를 begin으로 래핑할 수 있습니다. / rescue 차단합니다.

작동 방식은 다음과 같습니다...

첫 번째 섹션(begin ), 실행할 코드가 있고 예외가 발생할 수 있습니다.

:

begin
  IO.sysopen('/dev/null')
rescue
  # ...
end

여기서 sysopen으로 파일을 열려고 합니다. . 파일을 열 수 없으면 예외가 발생합니다.

지금이 rescue를 사용하기에 완벽한 시간입니다. 키워드!

이 키워드를 사용하면 예외가 발생했을 때 어떤 일이 일어나길 원하는지 말할 수 있습니다. 따라서 실패 모드는 제어할 수 있습니다.

:

begin
  IO.sysopen('/dev/null')
rescue
  puts "Can't open IO device."
end

이 오류를 기록하고 어떤 종류의 기본값을 제공하려고 합니다.

하지 않다. 무시하다. 오류.

여러 예외 구조

rescue를 알아야 합니다. 선택적 인수를 취합니다.

이 주장은 무엇입니까?

이 인수는 예외 클래스입니다. 당신이 구출하고 싶은.

실행 중인 코드에 따라 다릅니다.

IO의 경우 :

  • Errno::ENOENT일 수 있습니다. 누락된 파일에 대해
  • 또는 Errno::EACCES 권한 오류

가장 좋은 점은?

동일한 시작/구조 블록에서 여러 예외를 처리할 수 있습니다.

좋아요 :

begin
  IO.sysopen('/dev/null')
rescue Errno::ENOENT
  puts "File not found."
rescue Errno::EACCES
  puts "Insufficient permissions, not allowed to open file."
end

여러 예외에 대해 동일한 작업이 발생하도록 하려면...

할 수 있습니다 :

begin
  IO.sysopen('/dev/null')
rescue Errno::ENOENT, Errno::EACCES
  puts "There was an error opening the file."
end

계속 배워봅시다!

블록 및 메서드 내에서 예외를 구하는 방법

항상 begin을 사용할 필요는 없습니다. 키워드.

생략할 수 있는 경우가 있습니다.

어디?

내부 메서드 및 블록.

:

def get_null_device
  IO.sysopen('/dev/null')
rescue Errno::ENOENT
  puts "Can't open IO device."
end

메소드 정의 자체가 begin의 작업을 수행합니다. , 생략할 수 있습니다.

블록을 사용하여 이 작업을 수행할 수도 있습니다.

:

["a.txt", "b.txt", "c.txt"].map do |f|
  IO.sysopen(f)
rescue Errno::ENOENT
  puts "Can't open IO device: #{f}."
end

이제 rescue를 사용하는 방법이 하나 더 있습니다. begin이 없는 키워드 .

어떻게 작동하는지 봅시다.

인라인 구조 이해 및 위험한 이유

rescue를 사용할 수 있습니다. 인라인.

드문 경우지만 이러한 형태의 예외 처리가 유용할 수 있습니다.

예시 :

["a.txt", "b.txt", "c.txt"].select { |f| File.open(f) rescue nil }.map(&:size)

이렇게 하면 존재하는 파일만 열 수 있고 존재하지 않는 파일은 무시할 수 있습니다.

결과적으로 기존 파일의 크기를 얻게 됩니다.

예외가 발생하지 않습니다.

이 작업을 수행하는 이유는 무엇입니까?

코드를 한 줄에 모두 유지할 수 있습니다.

그게 다야.

이 형식의 rescue를 사용할 때 "숨겨진 위험"이 있습니다. StandardError에서 내림차순으로 모든 예외가 발생하기 때문입니다. .

가장 예외적인 경우입니다.

왜 좋지 않습니까?

다양한 예외를 선택하는 대신 특정 예외만 처리하는 것이 가장 좋기 때문입니다.

이렇게 하면 자신에게 오류를 숨기는 것을 방지할 수 있습니다!

숨겨진 오류는 모든 종류의 이상한 동작 및 디버그하기 어려운 문제로 이어질 수 있습니다.

요약

Ruby의 오류, 기본 예외 처리 및 rescue에 대해 배웠습니다. / begin 키워드.

도움이 되셨다면 이 글을 공유해주세요 🙂

읽어주셔서 감사합니다!