IO.StreamError 예외
IO.StreamError 예외
IO.StreamError는 스트림에 데이터를 쓰는 과정에서 문제가 생겼을 때 던져지는 예외예요. 조금 더 정확히 말하면, 어떤 디바이스(파일, 터미널, 네트워크 소켓 등)에 스트림을 통해 쓰기가 실패하면 이 예외가 발생해요.
예를 들어 이미 닫힌 파일에 IO.binwrite/2 같은 함수로 쓰려고 하거나, 쓰기 작업 자체가 실패하면 IO.StreamError를 만나게 되죠. 이 예외는 Exception 구조체라서 rescue 블록에서 패턴 매칭으로 잡아낼 수 있어요.
try do
IO.binwrite(device, "데이터")
rescue
e in IO.StreamError ->
IO.puts("스트림 쓰기 실패: #{Exception.message(e)}")
end
보통은 단순히 예외를 문자열로 만들거나, 로그로 남길 때 이 구조체를 그대로 넘겨도 돼요. 파일을 다룰 때 닫힌 파일을 실수로 건드리지 않도록 흐름만 잘 관리하면 이 예외를 만날 일이 많지 않아요.
출처: IO.StreamError
본문
IO.StreamError는 스트림에 쓰기(write)를 수행할 때 오류가 발생하면 던져지는 예외입니다. 파일이 닫혀 있거나, 디바이스가 더 이상 쓰기를 받아들이지 않거나, 하드웨어·네트워크 수준에서 쓰기가 깨지는 등 다양한 원인으로 발생할 수 있어요.
** (IO.StreamError) stream has been closed
이런 예외는 try/rescue로 잡아서 사용자에게 친절한 메시지로 바꾸거나, 로그로 기록한 뒤 복구 흐름을 타게 할 수 있어요. 함수형 언어답게 예외를 값처럼 다룰 수도 있지만, 스트림 쓰기는 부수 효과가 있는 작업이라 보통은 rescue로 처리하는 게 자연스러워요.
더 알아보기
IO모듈: 스트림 쓰기와 읽기를 담당하는 기본 입출력 APIFile모듈: 파일 디바이스 열기·닫기와 관련된 예외 처리 흐름Exception모듈: Elixir 예외 구조체의 공통 인터페이스