06-2 예외 고급
예외 객체 (exception object)
try:
예외가 발생할 가능성이 있는 구문
except 예외의 종류 as 예외 객체를 활용할 변수 이름:
예외가 발생했을 때 실행할 구문
# try excpet 구문으로 예외를 처리합니다.
try:
# 숫자로 변환합니다.
number_input_a = int(input("정수 입력> "))
# 출력합니다.
print("원의 반지름:", number_input_a)
print("원의 둘레:", 2 * 3.14 * number_input_a)
print("원의 넓이:", 3.14 * number_input_a * number_input_a)
except Exception as exception:
# 예외 객체를 출력해봅니다.
print("type(exception):", type(exception))
print("exception:", exception)
예외 구분하기
예외 객체를 사용하면 except 구문을 if 조건문처럼 사용해 예외를 구분할 수 있다.
# 변수를 선언합니다.
list_number = [52, 273, 32, 72, 100]
# try except 구문으로 예외를 처리합니다.
try:
# 숫자를 입력받습니다.
number_input = int(input("정수 입력> "))
# 리스트의 요소를 출력합니다.
print("{}번째 요소: {}".format(number_input, list_number[number_input]))
except Exception as exception:
# 예외 객체러를 출력해봅니다.
print("type(exception):", type(exception))
print("exception:", exception)
# 정상적으로 정수를 입력한 경우
>> 정수 입력> 2
>> 2번째 요소: 32
# 정수로 변환될 수 없는 값을 입력한 경우 ValueError가 발생합니다.
>> 정수 입력> 안녕하세요
>> type(exception): <class 'ValueError'>
>> exception: invalid literal for int() with base 10: '안녕하세요'
# 정수를 입력하지만, 리스트의 길이를 넘는 인덱스를 입력한 경우 IndexError가 발생합니다.
>> 정수 입력> 1000
>> type(exception): <class 'IndexError'>
>> exception: list index out of range
예외 구분하기
파이썬은 except 구문 뒤에 예외의 종류를 입력해서 예외를 구분할 수 있다.
try:
예외가 발생할 가능성이 있는 구문
except 예외의 종류A:
예외가 발생했을 때 실행할 구문
except 예외의 종류B:
예외B가 발생했을 때 실행할 구문
except 예외의 종류C:
예외C가 발생했을 때 실행할 구문
ValueError와 IndexError를 구분해 보자
# 변수를 선언합니다.
list_number = [52, 273, 32, 72, 100]
# try except 구문으로 예외를 처리합니다.
try:
# 숫자를 입력받습니다.
number_input = int(input("정수 입력> "))
# 리스트의 요소를 출력합니다.
print("{}번째 요소: {}".format(number_input, list_number[number_input]))
except ValueError:
# ValueError가 발생하는 경우
print("정수를 입력해 주세요!")
except IndexError:
# IndexError가 발생하는 경우
print("리스트의 인덱스를 벗어났어요!")
# 정상적으로 정수를 입력한 경우
>> 정수 입력> 2
>> 2번째 요소: 32
# 정수가 아닌 값을 입력해 ValueError를 발생시키면 ValueError except 구문으로 들어가 출력합니다.
>> 정수 입력> 안녕하세요!
>> 정수를 입력해 주세요!
# 리스트의 인덱스를 넘는 숫자를 입력하면 IndexError except 구문으로 들어가 문자열을 출력합니다.
>> 정수 입력> 1000
>> 리스트의 인덱스를 벗어났어요!
예외 구분 구문과 예외 객체
raiser 구문
개발자가 적극적으로 직접 일으키는 Exception이다.
프로그램이 강제 종료되는 것을 막기 위해 꼭 처리해야 한다.
또는 ‘이 부분을 그냥 넘어가면 나중에 큰 문제가 발생하니까 여기에서 강제 종료시키자’라는 경우도 있다.
# 입력을 받습니다.
number = input("정수 입력> ")
number = int(number)
# 조건문 사용
if number > 0:
# 양수일 때: 아직 미구현 상태입니다.
raise NotImplementedError
else:
# 음수일 때: 아직 미구현 상태 입니다.
raise NotImplementedError
(base) C:\Users\USER\Desktop\WorkSpace\Project01>C:/Users/USER/anaconda3/python.exe "c:/Users/USER/Desktop/WorkSpace/Project01/runner copy 2.py"
정수 입력> 10
Traceback (most recent call last):
File "c:\Users\USER\Desktop\WorkSpace\Project01\runner copy 2.py", line 76, in <module>
raise NotImplementedError
NotImplementedError
아직 구현되지 않은 부분이므로 일부러 예외를 발생 시켜 프로그램을 죽게 만들어 잊어버리지 않도록 한다. 이때 사용한 raiser 키워드가 예외를 강제로 발생 시키는 기능을 한다.
사용 방법은 rasie 뒤에 예외 이름을 입력해 주면 끝이다.
모듈 = .py
패키지 = .py 모아둔것
표쥰 모듈 = 파이썬에 기본적으로 내장되어 있음
외부 모듈 = 다른 사람들이 만들어서 공개한 모듈
기본 사용 방법 import 모듈 이름