디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

러빨러도 울고 갈, Ada 예외 처리, 6.4 예외 전파

나르시갤로그로 이동합니다. 2025.09.16 02:25:14
조회 63 추천 0 댓글 0

6.4 예외 전파

예외가 발생했을 때 현재 실행 중인 블록에 해당 예외를 처리할 수 있는 when 절이 없으면, 예외는 소멸하지 않고 자신을 호출한 코드로 전파됩니다. 이처럼 예외가 호출 스택을 거슬러 올라가는 과정을 예외 전파(exception propagation)라고 합니다.

전파 과정

  1. 서브프로그램이나 블록문(declare ... begin ... end) 실행 중 예외가 발생합니다.
  2. 해당 블록의 정상적인 실행은 즉시 중단됩니다.
  3. Ada 런타임은 해당 블록의 exception 처리 구역에서 발생한 예외와 일치하는 when 절을 찾습니다.
  4. 만약 일치하는 when 절이 없으면 (또는 exception 구역 자체가 없으면), 예외는 전파됩니다.
  5. 전파된다는 것은, 현재 블록을 호출했던 지점에서 동일한 예외가 다시 발생하는 것을 의미합니다. 이 과정은 적절한 예외 처리기를 만나거나, 태스크의 최상위에 도달할 때까지 반복됩니다.

예시

다음 코드에서 procedure_bConstraint_Error에 대한 처리기가 없습니다. 따라서 예외가 발생하면, procedure_b를 호출한 procedure_a로 예외가 전파되어 그곳의 처리기가 실행됩니다.

with Ada.Text_IO;

procedure main_example is

  -- procedure_b를 미리 선언하여 procedure_a에서 호출 가능하게 함
  procedure procedure_b;

  -- procedure_b를 호출하는 procedure_a의 구현
  procedure procedure_a is
  begin
    Ada.Text_IO.put_line ("procedure_b를 호출합니다...");
    procedure_b;
  exception
    when Constraint_Error =>
      Ada.Text_IO.put_line ("procedure_a에서 예외가 처리되었습니다.");
  end procedure_a;

  -- 예외를 발생시키는 procedure_b의 구현
  procedure procedure_b is
    x : Integer := 0;
    y : Integer;
  begin
    Ada.Text_IO.put_line ("procedure_b 내부에서 예외를 발생시킵니다...");
    y := 1 / x;
    -- 위의 나눗셈에서 예외가 발생하므로 이 줄은 실행되지 않음
  end procedure_b;

begin
  -- 프로그램 실행을 시작하기 위해 procedure_a를 호출
  procedure_a;
end main_example;

전파의 규칙

예외 전파에는 다음과 같은 두 가지 규칙이 적용됩니다.

1. 선언부에서의 예외

서브프로그램이나 블록의 선언부(예: isbegin 사이)에서 예외가 발생하면, 해당 블록의 exception 처리기는 이를 처리하지 못하고 즉시 상위 실행 문맥으로 전파됩니다.

procedure example is
  -- 선언부에서 Constraint_Error 발생
  n : Positive := 0;
begin
  null;
exception
  -- 이 처리기는 선언부의 예외를 처리할 수 없음
  when Constraint_Error =>
    Ada.Text_IO.put_line ("이 메시지는 출력되지 않습니다.");
end example;

2. 태스크에서의 예외

처리되지 않은 예외가 태스크(task)의 최상위 레벨까지 전파되면, 더 이상 다른 곳으로 전파되지 않고 해당 태스크가 종료됩니다. 자세한 내용은 태스크를 다루는 8.1절에서 다시 설명하겠습니다.




https://nimfsoft.art/ko/books/ada-programming/#64-%EC%98%88%EC%99%B8-%EC%A0%84%ED%8C%8C


 


추천 비추천

0

고정닉 0

0

댓글 영역

전체 댓글 0
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 우리나라를 대표해서 UN 연설자로 내보내고 싶은 스타는? 운영자 25/09/29 - -
AD 프로게이머가 될테야!! 운영자 25/10/01 - -
공지 프로그래밍 갤러리 이용 안내 [96] 운영자 20.09.28 47669 65
2894415 러빨러.. ㅋㅋ 나한테 개털리네 ㅋㅋ 나르시갤로그로 이동합니다. 23:12 1 0
2894414 별 잡다한 짓을 좀 관둘까 생각중임 ㅇㅇ(223.38) 23:06 3 0
2894413 개발일 때려치고 싶다 [1] 프갤러(182.217) 23:05 8 0
2894412 카톡 안드로이드 아이폰 윈도우 넷플릭스 스포티파이 멜론같은 발명도둑잡기(118.216) 23:02 5 0
2894411 러스트는 해외에서도 안 써요 ㅋㅋㅋ 나르시갤로그로 이동합니다. 23:01 3 0
2894410 하이텔 개오동 최고 최악 게임 발명도둑잡기(118.216) 22:59 6 0
2894406 누가 더 유명함 아리아나 그란데 호날두 디바(59.28) 22:43 4 0
2894402 러스트가 너무 뛰어난 언어이기 때문에 배우면 오히려 인생 망합니다. [1] 프갤러(110.8) 22:37 18 0
2894396 옥상달빛 발명도둑잡기(118.216) 22:29 6 0
2894393 카톡 쉴드치는 병신들이 어이없는점 [1] 밀우갤로그로 이동합니다. 22:25 19 0
2894392 이제 이재명 때문에 외식 안한다 중금속 발암물질 먹기 싫음 [2] ♥덩냥이♥갤로그로 이동합니다. 22:25 25 1
2894389 신념에 따라 180도 다르게 보일 내용 ㅇㅇ(121.168) 22:20 8 0
2894385 러스트는 단순히 실행성능이 좋은 언어가 아닙니다. [20] 프갤러(110.8) 22:13 51 0
2894383 러스트 인생 40 년 갈아 넣었습니다. 프갤러(59.16) 22:03 15 0
2894378 나도 예전에는 로레벨과 효율성에 애정이 깊었는데 [2] ㅇㅇ(121.168) 21:23 43 0
2894376 그알에서 2번이나 제보를 요청했지만 방영 실패한 미제사건 발명도둑잡기(118.216) 21:19 15 0
2894374 앱개발자의 현실을 보여줌 [5] 프갤러(121.142) 21:17 128 13
2894371 코인 자동매매는 외주받을때마다 로직 천차만별이고 [1] ㅆㅇㅆ(124.216) 21:08 39 0
2894367 멘헤라 모모링..❤ ♥덩냥이♥갤로그로 이동합니다. 20:55 23 0
2894366 AI 갓파더 얀 르쿤의 충격 경고 "LLM은 막다른 길, AGI는 오지 [1] 발명도둑잡기(118.216) 20:53 19 0
2894365 나라가 니꺼냐? 망하든 말든 신경꺼 ㅋㅋ [2] 나르시갤로그로 이동합니다. 20:53 31 0
2894358 나라망하는데이유있냐??기득권들이부패해서그렇지ㅋㅋ 타이밍뒷.통수한방(1.213) 20:30 15 0
2894354 아이폰 구매자 중 20% 확률로 똥가루폰 받는거 아님? [1] 야옹아저씨갤로그로 이동합니다. 20:20 26 0
2894352 요번에 한국 여행 가는데 포항이나 가볼까? Kyle(103.21) 20:18 14 0
2894350 러스트 담론을 해체하다 나르시갤로그로 이동합니다. 20:15 17 0
2894348 Rust 틀딱들의 죄가 너무도 많습니다 나르시갤로그로 이동합니다. 20:14 18 0
2894339 삼성 디바이스 컴포지트 디바이스 랑 연결성 디바이스 V2 뭡니까? 넥도리아2025(220.74) 19:56 28 0
2894335 AI를 쓴다는게 AI가 주는 소스 그대로 쓰는게 아닌데 착각하네 [1] 프갤러(125.184) 19:52 40 0
2894334 c cpp 틀딱들의 죄가 많습니다. 프갤러(110.8) 19:49 21 0
2894332 웹 프론트 엔드는 사실 문법보다 어떻게 꾸미느냐가 더 중요해서 [1] ㅆㅇㅆ(124.216) 19:43 48 0
2894328 연휴에도 회사에서 연락오는 사람? [9] ㅇㅇ(211.235) 19:28 58 0
2894327 언어가 메모리 안전성 보장해주면 좋은거 아닌가요? [22] ㅇㅇ(121.168) 19:28 57 0
2894326 c cpp 대체되는거는 그냥 요즘 젊은이들이 틀딱어 싫어합니다. 프갤러(110.8) 19:26 26 0
2894325 C++ 인생 40 년 갈아 넣었습니다. 프갤러(59.16) 19:23 27 0
2894324 나님.. 왤케 특별한걸깡..? ♥덩냥이♥갤로그로 이동합니다. 19:21 21 0
2894323 러스트는 특장점이 과장되고 과대성으로 홍보된 언어입니다. 나르시갤로그로 이동합니다. 19:17 20 0
2894322 러스트는 장기적으로도 c++ 대체 불가능해요. 입증 有 [5] 나르시갤로그로 이동합니다. 19:11 40 0
2894320 이력서 한줄도 작성 못함 ㅇㅇ(211.235) 19:10 19 0
2894318 ㅋㅅㅋ ♥덩냥이♥갤로그로 이동합니다. 19:07 19 0
2894311 러스트는 장기적으로 CPP 대체하겠지 이건 어쩔 수 없는 흐름임 [3] ㅆㅇㅆ(124.216) 19:00 39 0
2894310 엥? 프로그래머 중에 러스트를 한번도 안들어보신 분이 있다고요? 프갤러(110.8) 18:58 18 0
2894307 STAGE_DIR = 'stage' 이렇게 하지 말고, Rakefile이 나르시갤로그로 이동합니다. 18:54 13 0
2894304 나르시 저거 고도의 러빠임 [1] 프갤러(118.235) 18:50 24 0
2894301 러스트 사용하면 안 되는 이유: 버려지는 러스트 플젝틀 나르시갤로그로 이동합니다. 18:47 19 0
2894297 좋은 언어 나쁜 언어는 없습니다. 입증 有 [1] 나르시갤로그로 이동합니다. 18:36 19 0
2894296 좋은 언어라 함은 바로 얼마나 러스트와 유사한가가 척도이니라 프갤러(110.8) 18:32 14 0
2894295 좌파들 선동에 검찰 없대고 경찰도 없애야할 판 ㅋㅋ 나르시갤로그로 이동합니다. 18:31 11 0
2894294 러스트 빠는 이유가 대체 뭐야? 안전해서? 나르시갤로그로 이동합니다. 18:26 12 0
2894293 좋은 언어가 무엇인지가 [2] ㅇㅇ(121.168) 18:24 30 0
뉴스 곽튜브 살 더 빠졌네…“형 부부와 같은 시기 임신” 결혼 앞두고 ‘깜짝 근황’ 디시트렌드 10.04
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2