SystemCallError

SystemCallError (시스템 호출 오류 예외)

SystemCallError저수준의 플랫폼 의존 오류 전부의 베이스 클래스예요. 현재 플랫폼에서 사용 가능한 오류들은 SystemCallError의 서브클래스이며 Errno 모듈 안에 정의돼 있어요.

File.open("does/not/exist")

이 코드를 실행하면 이런 예외가 올라와요.

Errno::ENOENT: No such file or directory - does/not/exist

출처: Ruby 4.0 API

본문

클래스 메서드 (Public Class Methods)

system_call_error === other → true or false

수신자가 일반 SystemCallError이거나, selfother의 오류 번호(error number)가 같으면 true를 돌려줘요. case 문 등에서 패턴 매칭에 쓸 수 있어요.

new(msg, errno = nil, func = nil) → system_call_error_subclass

errno가 알려진 시스템 오류 코드와 일치하면 그 오류에 맞는 Errno 클래스를 만들고, 그렇지 않으면 일반 SystemCallError 객체를 만들어요. 오류 번호는 이후 errno 메서드로 접근할 수 있어요.

숫자만 주면 그 값을 Integererrno로 보고 msg는 생략돼요. 첫 인자를 msg로 쓰면 그 값을 추가 오류 메시지로 넣어요.

SystemCallError.new(Errno::EPIPE::Errno)
#=> #<Errno::EPIPE: Broken pipe>

SystemCallError.new("foo")
#=> #<SystemCallError: unknown error - foo>

SystemCallError.new("foo", Errno::EPIPE::Errno)
#=> #<Errno::EPIPE: Broken pipe - foo>

funcnil이 아니면 메시지 뒤에 " @ "를 붙여 덧붙여요.

SystemCallError.new("foo", Errno::EPIPE::Errno, "here")
#=> #<Errno::EPIPE: Broken pipe @ here - foo>

SystemCallError의 서브클래스도 그 서브클래스의 new를 통해 직접 인스턴스화할 수 있어요. Errno를 참고하세요.

인스턴스 메서드 (Public Instance Methods)

errno → integer

SystemCallError의 오류 번호를 돌려줘요.