1. 예외 (Exception)
프로그램 실행 중 발생할 수 있는 문제 또는 오류 상황을 의미한다. 예외가 발생하면 프로그램이 중단되기 때문에 이를 적절하게 처리하여 중단을 방지하거나 오류에 대한 정보를 사용자에게 제공해야 한다.
print(10 / 3)
print(5 / 0) # ZeroDivisionError: division by zero
print(4/2)
2. 예외 처리 기본 구조
try:
# 예외가 발생할 가능성이 있는 코드
except ExceptionType1: # 'ExceptionType1'에는 실제 예외 유형이 들어갑니다.
# ExceptionType1 예외가 발생했을 때 실행될 코드
except ExceptionType2: # 'ExceptionType2'에는 다른 예외 유형이 들어갑니다.
# ExceptionType2 예외가 발생했을 때 실행될 코드
# 추가적인 except 블록을 계속 추가할 수 있습니다.
else:
# try 블록에서 예외가 발생하지 않았을 때 실행될 코드
finally:
# 예외 발생 여부와 관계없이 항상 실행될 코드
2-1. 특정 예외 처리하기
try:
print(10 / 3)
print(5 / 0) # 에러 발생
print(4/2) # 실행되지 않음
except ZeroDivisionError:
print('예외가 발생했어요')
print('프로그램을 종료합니다')
try:
data = [10, 20, 30, 40, 50]
print(data[2])
print(data[5]) # 에러 발생
print(data[0]) # 실행되지 않음
except IndexError:
print('인덱스 지정이 올바르지 않습니다')
2-2. 모든 예외 처리하기
try:
print(10 / 3)
print(5 / 0)
print(4/2)
except:
print('예외가 발생했어요')
print('프로그램을 종료합니다')
2-3. 예외 에러 메세지 받기
try:
data = [10, 20, 30, 40, 50]
# print(data[0])
# print(int('안녕'))
print(5/0)
except IndexError:
print('인덱스 지정이 올바르지 않습니다')
except ValueError:
print('값이 잘못 입력되었습니다')
except ZeroDivisionError:
print('0으로 나눌 수 없습니다')
except: # 작성 시 맨 마지막으로 작성해야 함 # Exception이 생략된 표현
print('예외가 발생했어요')
print('프로그램을 종료합니다')
2-4. 예외가 발생하지 않을 경우 처리하기, 예외 발생 여부 관계없이 처리하기
try:
data = [10, 20, 30, 40, 50]
# print(data[5])
# print(int('안녕'))
print(5/0)
except IndexError as e:
print(e)
except ValueError as e:
print(e)
except ZeroDivisionError as e:
print(e)
except Exception as e:
print('예외가 발생했어요')
print('프로그램을 종료합니다')
try:
data = [10, 20, 30, 40, 50]
# print(data[5])
# print(int('안녕'))
# print(5/0)
except IndexError as e:
print(e)
except ValueError as e:
print(e)
except ZeroDivisionError as e:
print(e)
else:
print('에러가 발생하지 않은 정상적인 프로그램')
finally:
print('에러에 관계없이 무조건 실행되는 문장')
print('프로그램을 종료합니다')
3. Exception 클래스
# raise: 예외 상황을 발생시킴
try:
raise Exception('예외가 발생했어요!!')
except Exception as e:
print(e)
def func1():
n = int(input('짝수를 입력하세요: '))
if n % 2 == 1:
raise Exception('홀수를 입력했어요!!')
print(n)
func1()
try:
func1()
except Exception as e:
print('예외가 발생: ', e)
def func1():
try: func2()
except TypeError:
print('타입이 올바르지 않습니다')
def func2():
func3()
def func3():
print('%d' % '문자열')
func1()
def func1():
func2()
def func2():
func3()
def func3():
try: # func1() func2() func3() 중 어디에 적든 상관 없음
print('%d' % '문자열')
except TypeError:
print('타입이 올바르지 않습니다')
func1()
class AgeLimitError(Exception):
def __init__(self, age, message='MZ세대 나이의 범위가 아님'):
self.age = age
self.message = message
super().__init__(self.message)
def check_age(age):
if age < 14:
raise AgeLimitError(age, 'MZ 나이 범위보다 작음')
elif age > 43:
raise AgeLimitError(age, 'MZ 나이 범위보다 큼')
else:
return f'{age} 나이: MZ 나이 범위 안에 포함'
ages = [17, 60, 46, 20, 80, 55, 26, 12, 5]
for age in ages:
try:
print(check_age(age))
except AgeLimitError as e:
print(f'{e.age} 나이 에러: {e}')
'파이썬 > 파이썬 기초 문법' 카테고리의 다른 글
파이썬 파일 입출력 (0) | 2024.10.20 |
---|---|
파이썬 모듈 (2) | 2024.10.20 |
파이썬 스페셜 메서드 (4) | 2024.10.19 |
파이썬 상속 (2) | 2024.10.19 |
클로저와 데코레이터 (1) | 2024.10.14 |