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 예외이름('메시지')
위와 같이 메시지를 전달해주면 됨