finally 쓰나 안 쓰나 똑같은 거 아님?

정현·2025년 1월 1일
post-thumbnail

Q. 위의 두 사진의 차이점은 뭘까?

일단 나는 처음에 try문을 배웠을때 finally의 필요성을 크게 느끼지 못했다
무조건 실행한다고 하지만 그냥 어차피 아래쓰는거나 finally 안에 쓰는거나 차이가 없는 줄 알았다
그도 그럴것이 어차피 except으로 막아주는데 뭔 소용인가 싶다

A. 별 차이 없음

실제로 차이 없다
아 물론 저 상황에서만 말이다
당연히 출력은 똑같이 0-2가 될 것이다
하지만? 다른 상황이라면 어떨까?

위의 사진 출력 결과는 어떨까?

일단 try문에서 0으로 나눴으므로 except문이 실행될거다
except문 안에는 무려 프로그램을 종료 시켜버리는 exit이 있다
흠 뭔가 뭔가 수상하지 않은가?




정답은

예상했다시피 무려 exit이 있음에도 불구하고 2가 출력된다



이유는?

finally문은 정말 무슨일이 있어도 실행이 되고 종료된다
그러므로 return, break 같은 건 물론 exit같이 프로그램을 완전히 종료시켜 버리는 것도 이겨내고 실행이 기여코 되고 끝난다

다른 언어에서도?

물론 다른 언어에서도 똑같이 작동한다
finally문 안에 코드는 return,break 같은 일이 발생해도 반드시 실행이 되고 끝난다
내용 추가 + (exit 같은 강제 종료는 언어마다 차이가 있음)



지옥에서 돌아오는 finally

어디다 써먹으면 좋을까?
보통 파이썬에서는 파일을 열고 닫을 일이 많은데 이럴때 사용하기 좋다
반드시 파일은 닫혀야 하므로 finally에 파일 닫는 걸 추가해두면 유용하게 사용할 수 있지 않을까 싶다

profile
노력으로 재능을 이길 수 없다면, 노력으로 재능을 만드는 개발자 서정현입니다

11개의 댓글

무슨 원리로 저게 가능한 걸까요?

1개의 답글
comment-user-thumbnail
2025년 1월 12일

파일 편집할 때도 finally는 쓸 데가 없습니다.

With만 이용하면 되는지라...

1개의 답글
comment-user-thumbnail
2025년 1월 13일

처음 예시로 들어주신 두 사진의 차이점의 결과로 0-1-2 라고 하셨는데,
exception이 발생하지 않았기 때문에 except 안에 있는 print(1)은 실행되지 않습니다.
따라서 출력 결과로 0-2가 맞습니다.

1개의 답글
comment-user-thumbnail
2025년 1월 14일
답글 달기
comment-user-thumbnail
2025년 1월 15일

컴파일러에서 우선순위큐로 종료 이전에 finally가 선점하나 보내요 컴파일러 한 번 봐야겠다 ㅎㅎ 신기

답글 달기