728x90
예외 Exception?
- 프로그램 동작 중 문제가 발생 되는것을 Exception(예외) 라고 함
- 파이썬 인터프리터가 처리 중 에러가 나면 메시지를 출력하고 종료됨
- 에러를 무시하고 진행하거나 다른 방법으로 처리되도록 핸들링 가능
간단하게 나누기를 동작하는 기능을 구현. 0 을 나눌 수 없음.
예외 발생 코드
n1 = int(input("수 입력 : "))
n2 = int(input("수 입력 : "))
ret = n1 / n2
print(f"{n1} / {n2} = {ret}")
실행 결과를 보자
에러코드가 나오면서 에러가 나고 프로그램이 종료 되었다.
예외처리 기법
try:
...
except 발생 오류[메시지 변수]:
...
위의 형태로 예외 처리를 할 수 있다!
try ☞ 예외가 발생할 수 있는 코드가 있는 영역(지역변수 선언 주의)
except ☞ 발생된 예외를 처리하는 코드를 작성하는 영역
아래의 예시를 보자
n1 = int(input("수 입력 : "))
n2 = int(input("수 입력 : "))
ret = 0
try: # 잘 사용 안하는 예외
ret = n1 / n2
print("정상")
except:
print("예외")
ret = 0
try: # 에러코드 포함해서 해야한다.
ret = n1 / n2
print("정상")
except ZeroDivisionError:
print("예외")
ret = 0
try:
ret = n1 / n2
print("정상")
except ZeroDivisionError as msg:
print("예외", msg) # 정보 포함 출력
print(f"{n1} / {n2} = {ret}")
실행결과
수 입력 : 3
수 입력 : 0
예외
예외
예외 division by zero
3 / 0 = 0
수 입력 : 0
예외
예외
예외 division by zero
3 / 0 = 0
예외 처리를 통해 에러가 발생했지만 프로그램이 종료 되지않고 끝까지 실행되는것을 볼 수 있다.
예외 try ~ else
- else는 try 영역에서 예외가 발생하지 않으면 실행되는 영역
- 반드시 except: 뒤에 작성
n1 = int(input("수 입력 : "))
n2 = int(input("수 입력 : "))
ret = 0
try:
ret = n1 / n2 # try 의 영역 먼저 실행
print("정상")
except: # 예외가 발생하면 except 실행, 발생하지 않으면 건너 뜀
print("예외")
else:
print("정상") # 예외가 발생하지 않으면 else 실행 후
print(f"{n1} / {n2} = {ret}") # 마지막 실행.
☜ 예외 처리가 되어 예외 출력 후 프로그램 종료
☜ 정상적인 나누기가 실행되어 정상 출력 후 프로그램 종료
예외 try ~ finally
- finally 는 예외가 발생 여부와 관계없이 무조건 실행되는 영역
- except: 없이 try 뒤에 작성 가능
- except: 가 있다면 뒤에 작성
n1 = int(input("수 입력 : "))
n2 = int(input("수 입력 : "))
ret = 0
try:
ret = n1 / n2 # try 의 영역 먼저 실행
print("정상")
except: # 예외가 발생하면 except 실행, 발생하지 않으면 건너 뜀
print("예외")
finally:
print("무조건") # 예외든 아니든 무조건 실행.
# finally = 자원 해제의 개념(스트림 닫기 close)
print(f"{n1} / {n2} = {ret}") # 마지막 실행.
실행 결과
수 입력 : 4
수 입력 : 0
예외
무조건
4 / 0 = 0
예외 raise
- raise 구문으로 개발자가 코드에서 직접 예외를 발생시킬 수 있다.
n1 = int(input("수 입력 : "))
n2 = int(input("수 입력 : "))
ret = 0
try:
if n1 > 10:
raise Exception("예외 메시지") # raise -> 예외를 직접 발생 시킬 수 있다.
ret = n1 / n2
print("정상")
except Exception as msg:
print("예외:", msg)
print(f"{n1} / {n2} = {ret}")
#실행결과
수 입력 : 11
수 입력 : 5
예외: 예외 메시지
11 / 5 = 0
n1 값이 10보다 크다면 예외 처리를 하도록 코딩했다.
예외 처리를 통해 내가 원하는 방향으로 프로그렘을 제어 할 수 있다!
728x90
'Python 파이썬' 카테고리의 다른 글
내장 함수(Built-In Function)_2 (0) | 2023.10.25 |
---|---|
내장 함수(Built-In Function)_1 (0) | 2023.10.25 |
클래스의 관계 표현, object 클래스 (0) | 2023.10.24 |
다형성(Polymorphism) (1) | 2023.10.24 |
상속, super (0) | 2023.10.24 |