자기계발/Python

[Python] 기본16. 예외 고급

호등 2022. 3. 16. 06:41
반응형

예외 객체

예외와 관련된 정보가 저장된 객체를 말한다. 다음과 같은 형태로 사용할 수 있다.

try:
	예외가 발생할 가능성이 있는 구문
except 예외의 종류 as 예외 객체를 활용할 변수 이름:
	예외가 발생했을 때 실행할 구문

예외 구분하기

except 구문 뒤에 예외의 종류를 입력해서 예외를 구분할 수 있다.
예외가 발생했을 때 예외 정보를 수집하면 프로그램을 개선하는데 도움이 된다.
Exception 객체를 사용하면 어떤 에러가 발생하는지 확인 가능하다.

try:
	예외가 발생할 가능성이 있는 구문
except 예외의 종류 A:
	예외A가 발생했을 때 실행할 구문
except 예외의 종류 B:
	예외B가 발생했을 때 실행할 구문
except 예외의 종류 C:
	예외C가 발생했을 때 실행할 구문

except로 지정하지 않은 예외가 발생하면 프로그램이 중간에 종료되어 버린다. 그럼 모든 예외를 예측하기 힘들어서 if 구문을 사용하지 않았었는데 조건문 사용하여 지정하는거랑 뭐가 다르냐! 할 수 있겠는데 사실 나도 정확한 이유는 잘 모르겠다. 아무튼 모든 예외의 어머니라고 부르는 Exception를 사용하여 예측하지 못한 오류를 처리할 수 있다.

list_number = [52,273,32,72,100]

try:
    #숫자 입력받기
    number_input = int(input("정수입력> "))
    print("{}번째요소: {}".format(number_input, list_number[number_input]))
    
except ValueError :
    #VlaueError가 발생하는 경우
    print("정수를 입력해야합니다.")
except IndexError:
    #IndexError가 발생하는 경우
    print("리스트의 인덱스를 벗어났습니다.")

위 코드는 정수를 입력받고 리스트안에 그 정수가 몇 번째 있는지 출력하는 코드이다.

여기서 예측할 수 있는 예외는
1) 정수가 아닌 글자를 입력하는 경우
2) 리스트 길이보다 큰 수를 입력하는 경우이다.
각각의 예외를 ValueError, IndexError로 처리했지만 예측할 수 없는 예외를 처리하기 위해 except Exception as exception 구문과 내용을 추가해야만 한다.

큰 규모의 프로그램을 개발할 때는 예외 처리로 떡칠을 한다고 표현할 정도로 예외 처리가 매우매우 많다고 한다.

raise 구문

이 전에 pass 키워드를 공부하면서 프로그램을 개발하는 동안 아직 구현되지 않은 부분을 잊지 않기 위해 강제로 문제를 발생시키는 방법을 배웠다.

number = input("정수 입력> ")
number = int(number)

#조건문 사용
if number > 0:
	#양수일 때 : 아직 미구현했습니다.
    raise NotImplementedError
else:
	#음수일 때 : 아직 미구현했습니다.
    raise NotImplementedError

사용방법은 raise 뒤에 예외 이름을 입력해주면 된다. 출력되는 메세지를 원하는 형태로 만들고 싶으면 예외 클래스를 만들어주면 되는데 일반적으로 많이 사용되는 내용은 아니다.


수많은 실력자의 코드를 보면서 어떤 방식으로 코드를 작성할 수 있는지 공부하는 것도 중요하다.
GitHub의 Django 페이지에서 원하는 코드를 입력하고 검색하면 다양한 코드를 확인할 수 있다. (단 이해하는데 시간 투자를 적지 않게 해야함)

반응형