try ~ except
try문에는 시도할 명령어가 입력되고, 여기서 오류가 발생할 경우 except문으로 넘어감
단 try문 실행 도중 예외가 발생할 경우 예외가 발생한 시점 이후의 코드는 실행되지 않음
while True:
try:
num = int(input('정수를 입력해주세요: '))
print("hi!")
except:
print('오류 발생')
'''
정수를 입력해주세요: 1
hi!
정수를 입력해주세요: hi
오류 발생
'''
하나의 except를 사용할 경우 발생한 모든 예외를 처리함
except 뒤에 특정 에외의 이름을 명시해주면 해당 예외가 발생했을 때만 처리. 여기에는 기본적으로 내장된 예외가 들어갈 수도 있고, 사용자가 직접 정의한 예외를 넣을 수도 있음
except는 여러번 사용 가능
while True:
try:
num = int(input('정수를 입력해주세요: '))
print("hi!")
except SyntaxError as s:
print('문법 오류 발생')
except ValueError as v:
print('입력값 오류 발생')
except가 예외 발생시 처리하는 코드라면, else는 try의 실행 결과 예외가 발생하지 않았을 때 처리하는 코드를 작성하는 부분excpet 없이 try ~ else는 옳지 않은 문법finally는 예외 발생 여부와 관계없이 항상 실행할 코드try문 실행 중 예외가 발생하지 않는다면 try, else, finally 부분에 작성된 코드가 실행되고, try문 실행 중 예외가 발생한다면 try문의 예외 발생시점까지의 코드, except, finally 부분의 코드가 실행됨raise는 특정 오류를 발생시키는 문법
if 조건문:
raise ValueError
assert는 assert 조건문, 표현문으로 작성되며 조건문 부분이 거짓이 될 경우 AssertionError를 발생시키는 문법
raise문과 유사하나 예외처리라기 보다는 절대 나와서는 안 되는 조건을 검사하는 경우, 즉 디버깅 용도로 많이 사용됨사용자가 정한 이름으로 예외 클래스를 만들어 사용할 수 있으며, 이 때 Exception 클래스를 상속하여 만듦
class 예외이름(Exception):
def __init__(self):
super().__init__('에러메시지')
# or
class 예외이름(Exception):
pass
두번째 경우와 같이 별도로 메시지를 지정하지 않고 생성해주었을 때는
raise 예외이름('메시지')
위와 같이 메시지를 전달해주면 됨