-예외(exception)란 코드르 실행하는 중에 발생한 에러.
예) 10 /0 하면 오류 발생.(ZeroDivisionError)
문법
try:
실행할 코드
except:
예외시 실행할 코드
예시
try:
x = int(input())
y = 10 / x
print(y)
except:
print('오류 발생')
문법
try:
실행할 코드
except 예외이름:
예외시 실행할 코드
예시
y = [10,20,30]
try:
index, x = map(int, input('인덱스와 나눌 숫자 입력하세요').split
print(y[index] / x)
except ZeroDivisionError:
print('숫자를 0으로 나눌 수 없습니다.')
except IndexError:
print('잘못된 인덱스입니다')
문법
try:
실행할 코드
except 예외 as 변수:
예외가 발생했을 때 처리하는 코드
-보통 변수자리엔 예외(exception)의 e를 따서 e로함.
예시
y = [1,2,3]
try:
index, x = map(int, input().split())
print(y[index] / x)
except ZeroDivisionError as e:
print('숫자를 0으로 나눌 수 없습니다', e)
except IndexError as e:
print('잘못된 인덱스입니다', e)
-예외가 여러개 발생하면 먼저 발생한 예외의 처리 코드만 실행된다(또는 예외 중 높은 계층의 예외부터 처리됨. 기반 클래스 > 파생 클래스 순서)
-예외 처리는 에러가 발생해도 스크립트의 실행을 중단시키기 않고 계속 실행하고자 할 때 사용
-다음과 같이 else는 except 바로 다음에 와야하고 except를 생략할 수 없다.
문법
try:
실행할 코드
except:
예외 발생시 실행할 코드
else:
예외 발생하지 않을 시 실행할 코드
예시
try:
x = int(input())
y = 10 / x
except ZeroDivisionError:
print('숫자를 0으로 나눌 수 없습니다.')
else:
print(y)
-finally 는 except와 else생략 가능, 예외발생 여부와 상관없이 항상 실행됨
문법
try:
실행할 코드
except:
예외 발생시 실행할 코드
else:
예외 발생하지 않을 때 실행할 코드
finally:
예외 발생 여부와 상관없이 항상 실행할 코드
문법: raise 예외('에러메세지')
try:
x = int(input())
if x % 3 != 0:
raise Exception('3의 배수가 아닙니다')
print(x)
except Exception as e:
print('예외가 발생했습니다', e)
-함수 안에서 raise사용하지만 함수 안에 try except가 없는 경우
def three_multiple():
x = int(input())
if x % 3 !=0:
raise Exception('3의 배수가 아닙니다')
print(x)
try:
three_multiple()
except Exception as e:
print("예외가 발생했습니다", e)
except 안에 raise를 사용하면 현재 예외를 다시 발생시킴(re-raise)
-다음은 three_multiple 코드 블록의 예외를 다시 발생시킨 뒤 상위 코드 블록에서 예외를 처리함
def three_multiple():
try:
x = int(input('3의 배수 입력하세요'))
if x % 3 !=0:
raise Exception('3의 배수가 아닙니다')
print(x)
except Exception as e:
print('three_multiple 함수에서 예외 발생', e)
raise
try:
three_multiple()
except Exception as e:
print("예외가 발생했습니다", e)
-사용자 정의 예외: 프로그래머가 직접 만든 예외. 예외에는 내장된 예외와 사용자 정의 예외가 있다.