Q. A함수 안에서 B 함수를 호출하였고, B 함수 도중에 예외 처리가 발생한 상황이다.
A 함수, B 함수 각각의 Try Except 여부에 따라 동작 방식은?
상황 1)
def B():
# 예외가 발생할 수 있는 코드
raise Exception("B 함수에서 오류 발생")
def A():
try:
B()
except Exception as e:
print(f"A에서 처리한 예외: {e}")
A()
>>> A에서 처리한 예외: B 함수에서 오류 발생
- B에서 raise 시키고 따로 except 처리 하지 않으면 A에서 걸린다.
상황 2)
def B():
try:
# 예외가 발생할 수 있는 코드
raise Exception("B 함수에서 오류 발생")
except Exception as e:
print(f"B에서 처리한 예외: {e}")
def A():
try:
B()
except Exception as e:
print(f"A에서 처리한 예외: {e}")
>>> B에서 처리한 예외: B 함수에서 오류 발생
- B에서 except 처리하면 A에서 except 안 걸린다.
상황 3)
def B():
try:
# 예외가 발생할 수 있는 코드
pas
except Exception as e:
raise Exception("B 함수에서 오류 발생")
print(f"B에서 처리한 예외: {e}")
def A():
try:
B()
except Exception as e:
print(f"A에서 처리한 예외: {e}")
A()
>>> B함수에서 except 이후에 raise를 발생 시키면 A함수에서 걸린다.
결론
- raise 이후 프로그램 흐름상 가장 빨리 만나는(?) except에서 단 한번 처리가 되며,
- exception 안에서 raise를 발생 시켜도 마찬가지로 그다음 except에서 처리된다.
- 예외 처리를 한곳에서 관리하고 싶다면, 핵심 흐름을 관리하는 함수 (e.g. A함수)에서만 except 처리하고,
나머지 곳에서는 raise만 수행한다.
파이썬 내장 예외 목록
- 예시: ZeroDivisionError, NameError, TypeError
https://docs.python.org/ko/3.13/library/exceptions.html
현상)
A함수에서 호출하는 B함수에서 raise가 발생했고, A 함수에 except가 있었는데 A함수를 호출하는 C함수의 except에서 걸렸다?
C-> A -> B
반응형
'프로그래밍 언어 > python' 카테고리의 다른 글
self의 의미 (0) | 2023.03.27 |
---|---|
Python에서 Call By Reference 구현하는 법 (0) | 2023.03.13 |
파이썬 프로퍼티(Property) (0) | 2023.01.08 |
Data Classes (0) | 2022.12.11 |
[OS] python 과 실행파일 (0) | 2021.04.09 |