- Python 기초 문법(예외처리)
Date:
Python 예외처리
- 예외(exception)란 코드를 실행하는 중에 발생한 에러
- 에러 발생하여도 프로그램이 멈추지 않고 계획한 방향으로 동작하게 함
try-except
- error 발생 시 실행 코드를 중단하고, 바로 except로 넘어가 코드를 실행함
- error 발생이 예상되는 곳에 사용하여 프로그램이 멈추지 않고 진행되도록 함
- 사용 방법
📰code
try :
실행할 코드
except :
예외가 발생했을 때 처리 코드
사용 예제 📰code
y=[10,20,30]
x=0,1,2,4
for i,j in zip(range(4),x):
try:
print(y[i]/j)
except ZeroDivisionError:
print('숫자 0으로 못나눔')
except IndexError:
print('잘못된 인덱스')
🔍result
숫자 0으로 못나눔 <br>
20.0 <br>
15.0 <br>
잘못된 인덱스
예외의 에러 메시지 받기
- 예외 상황에서 에러에 대한 정보를 받아옴
📰code
try:
print(1/0)
except Exception as e:
print(e)
🔍result
division by zero
예외 계층도
- index error 가 zerodivision보다 우선순위가 높음
- except선언 순서와 상관없이 python 내부에 프로그래밍 되어있는 순서가 있음
📰code
y=[10,20,30]
x=0
i=5
try: print(y[i]/x)
except IndexError: print('잘못된 인덱스')
except ZeroDivisionError: print('숫자 0으로 못나눔')
🔍result
잘못된 인덱스
📰code
y=[10,20,30]
x=0
i=5
try: print(y[i]/x)
except ZeroDivisionError: print('숫자 0으로 못나눔')
except IndexError: print('잘못된 인덱스')
🔍result
잘못된 인덱스
else와 finally
- try가 정상적으로 진행되었을때, else로 진행됨
- try에 예외의 발생 여부와 상관없이 실행할 코드
📰code
try: print(1/0)
except Exception as e: print('except :', e)
else : print('else : 문제 없음')
finally : print('finally : 끝')
🔍result
except : division by zero
finally : 끝
📰code
try: print(1/1)
except Exception as e: print('except :', e)
else : print('else : 문제 없음')
finally : print('finally : 끝')
🔍result
try : 1.0
else : 문제 없음
finally : 끝
예외 발생시키기
- 기존에 없던 에러이지만 사용자의 필요에 의해 에러를 만들 수 있음
raise
- raise를 통한 Exception에 저장된 에러는 지역 변수처럼 함수 안에서 사용되어도 밖에서도 사용 가능함
📰code
try:
x=3
if x%2!=0:
raise Exception('홀수')
print(x)
except Exception as e:
print('error code :',e)
🔍result
error code : 홀수
함수를 통한 에러 코드 받기 📰code
def Chk_even():
x=3
if x%2!=0:
raise Exception('홀수')
try:
Chk_even()
except Exception as e:
print('error code :',e)
🔍result
error code : 홀수
assert
- 조건식이 맞지않으면 error 발생
📰code
x=1
assert x%2==0, '짝수 아닙니다'
print(x)
🔍result
예외 만들기
- 프로그래머가 직접 만든 예외를 사용할 수 있음
- raise와 동일한 결과가 나오지만, raise에 함수 자체를 사용하는 방법도 있음
- 사용 방법
📰code
class 예외이름(exception):
def __init__(self):
super().__init__('에러메세지')
Exception
에 에러메세지를 추가하였기 때문에 에러 발생시켰을때 확인 가능함
📰code
class NotEvenError(Exception):
def __init__(self):
super().__init__('짝수가 아닙니다')
try:
x=3
if x%2!=0:
raise NotEvenError
except Exception as e:
print('error code :',e)
🔍result
error code : 짝수가 아닙니다
📌reference
💡 수정 필요한 내용은 댓글이나 메일로 알려주시면 감사하겠습니다!💡
댓글