- 프로그램 규칙(문법)이 잘못된 것 - 동작도 못해보고 바로 error가 나서 실행이 안됨
EX)
while True
print("Hello")
":"가 없어서 ERROR가 나타남
예외(Exception)
- 프로그램 언어 규칙(문법)은 맞음 => 실행 O - 실행 도중에 잘못된 입력값이 들어오거나 비정상 종료
EX)
a = 5/0
문법은 맞지만 어떤 숫자를 0으로 나누는 것은 존재하지 않음.
예외처리
- try 안 코드가 실행되다가 예외가 발생하면 except에서 처리하는 것. - 예외가 발생안하면? 그냥 통과
EX)
try:
x = int(input("나눌 숫자를 입력하세요: "))
y = 10/x
print(y)
except:
print("예외가 발생했습니다.")
특정 예외만 처리하기
except에 예외 이름을 지정해서 특정 예외가 발생했을 때만 처리 코드를 실행
EX)
try:
x = int(input("나눌 숫자를 입력하세요: "))
y = 10/x
print(y)
except ZeroDivisionError:
print("0으로 나눌 수 없습니다.")
except ValueError:
print("숫자를 넣으세요.")
예외의 에러 메시지 받아오기
except에서 as뒤에 변수를 지정하여 발생한 예외의 에러 메시지를 받아온다.
EX)
try:
x = int(input("나눌 숫자를 입력하세요: "))
y = 10/x
print(y)
except ZeroDivisionError as e:
print("0으로 나눌 수 없습니다.",e)
except ValueError as e:
print("숫자를 넣으세요.",e)
모든 예외의 에러 메시지 받아오기 => except에 Exception을 지정하고 as뒤에 변수를 넣는다.
다중 예외 처리 구조
예외가 발생하지 않을 때 코드를 실행하려면 else사용
EX)
try:
x = int(input("나눌 숫자를 입력하세요: "))
y = 10/x
except Exception as e:
print("예외가 발생했습니다.",e)
else:
print(y)
예외 발생 여부와 상관없이 항상 코드를 실행하는 "finally"
EX)
try:
x = int(input("나눌 숫자를 입력하세요: "))
y = 10/x
except Exception as e:
print("예외가 발생했습니다.",e)
else:
print(y)
finally:
print("코드 실행 종료")
예외 발생시키기
사용자가 직접 예외를 발생시키고 처리하는 방법
EX)
try:
x = int(input("5의 배수를 입력: "))
if x%5 != 0:
raise Exception("5의 배수가 아님!!!")
print(x)
except Exception as e:
print("예외 발생: ",e)
예외와 함수
1. 함수 안에서 예외가 발생하면 함수 안에 예외 처리하는 부분이 있는지 확인 => 있으면 예외처리 2. 함수 안에 없으면 함수를 호출한 상위 코드 블록에 예외 처리가 있는지 확인 => 있으면 예외처리 3. 여기도 없으면 프로그램 멈추고 error 메시지 출력
EX)
함수 안에서 예외처리
def five_multiple():
try:
x = int(input("5의 배수를 입력: "))
print(x)
except Exception as e:
print("예외 발생: ",e)
five_multiple()
함수 안 예외를 상위로 넘긴 경우
def five_multiple():
x = int(input("5의 배수를 입력: "))
print(x)
try:
five_multiple()
except Exception as e:
print("예외 발생:",e)
"raise"를 사용해서 함수 안에서 사용자 예외를 발생시키고 상위에서 처리
def five_multiple():
x = int(input("5의 배수를 입력: "))
if x%5 != 0:
raise Exception("5의 배수가 아님!!!")
print(x)
try:
five_multiple()
except Exception as e:
print("예외 발생: ",e)
현재 예외를 다시 발생시키기
def five_multiple():
try:
x = int(input("5의 배수를 입력: "))
if x%5 != 0:
raise Exception("5의 배수가 아님!!!")
print(x)
except Exception as e:
print("함수 안에서 예외 발생: ",e)
raise #raise로 현재 예외를 다시 발생 => 상위로 넘김
try:
five_multiple()
except Exception as e:
print("스크립트 파일에서 예외 발생:",e)