-
[Python] 예외 처리 고급NAN/Python 2021. 6. 20. 20:44728x90
Exception
Error Code 지난 포스팅에 가볍게 에러 코드의 종류를 살펴보았는데, 이는 try 구문에도 사용할 수 있다.
모든 예외 정보는 예외 객체 exception object에 저장되는데 이를 활용 할 수 있다.
예외 객체의 기본 형태는 다음과 같다.
try: 예외가 발생할 가능성이 있는 구문 except 에러 코드 as 예외 객체를 활용할 변수 이름: 예외가 발생했을 때 실행할 구문
기본적으로 try except 구문과 큰 차이는 없지만, 여러 가지 예외 상황을 예상하고 미리 대처할 수 있다는 점으로
규모가 큰 프로젝트에 자주 사용되곤한다.
list_number = [52,273,32,72,100] try: number = int(input("숫자를 입력하세요 : ")) print(f"{number}번째 요소: {list_number[number]}") except ValueError as x: print("정수를 입력해 주세요!") print(x) except IndexError as x: print("리스트의 인덱스를 벗어났어요!") print(x) 숫자를 입력하세요 : 문자를 입력했다! 정수를 입력해 주세요! invalid literal for int() with base 10: '문자를 입력했다!'
list_number = [52,273,32,72,100] try: number = int(input("숫자를 입력하세요 : ")) print(f"{number}번째 요소: {list_number[number]}") except ValueError as x: print("정수를 입력해 주세요!") print(x) except IndexError as x: print("리스트의 인덱스를 벗어났어요!") print(x) 숫자를 입력하세요 : 100 리스트의 인덱스를 벗어났어요! list index out of range
이런 형태로 예외를 구분하고 예외가 발생했을 때 사용될 코드를 미리 작성 해 두면 되는데, 만약
작성된 예외 범위를 벗어난다면 마찬가지로 프로그램은 종료된다.
이를 방지하기 위해 예외 처리 후에는 항상 except Exception as 예약어 : 를 추가하자
list_number = [52,273,32,72,100] try: number = int(input("숫자를 입력하세요 : ")) print(f"{number}번째 요소: {list_number[number]}") 예외.발생함() except ValueError as x: print("정수를 입력해 주세요!") print(x) except IndexError as x: print("리스트의 인덱스를 벗어났어요!") print(x) except Exception as x: print("알수 없는 오류 발생!") print(x) 숫자를 입력하세요 : 3 3번째 요소: 72 알수 없는 오류 발생! name '예외' is not defined
코드를 살펴보면 예외. 발생함()이라는 정의되지 않은 코드를 작성하고 input은 범위에 맞는 숫자를 입력하였는데
범위에 맞게 작성된 코드는 실행이 되고,
알 수 없는 오류 역시 알려주며 프로그램이 안정적으로 종료된 것을 확인할 수 있었다.
추가로 너무 치명적인 문제에도 프로그램이 종료되지 않는다면 그것 또 한 문제가 될 수 있으니
상황에 맞게 잘 조절하여 사용하도록 하자
이와 같은 예외 처리는 게임 서버가 터졌다거나 명절에 기차 예매로 인해 인파가 몰려
데이터 베이스의 연결이 많아지면 예외가 발생할 경우에 사용된다.
즉 모든 프로그래밍 서비스에는 예외 처리가 필수적이라는 이야기이다.
raise
아직 구현되지 않았거나, 예외 처리로 넘어가게 되면 큰 문제가 일어날 수 있는 부분을 강제 종료시키기 위해
사용되는 키워드이다.
pass는 넘어가는 구문이라면 raise는 종료시키는 구문이라고 할 수 있다.
num = input('정수 입력 : ') num = int(number) if num > 0: raise NotImplementedError else: raise NotImplementedError 정수 입력 : 7 --------------------------------------------------------------------------- NotImplementedError Traceback (most recent call last) <ipython-input-44-94402ccf4275> in <module>() 4 if num > 0: 5 ----> 6 raise NotImplementedError 7 8 else: NotImplementedError:
구문의 활용은 'raise 예외 객체'로 이루어져 있으며,
이때 출력되는 메시지의 형태를 바꾸고 싶다면 예외 클래스를 만들어 활용하여야 한다.
클래스는 추후에 살펴보도록 하자
'NAN > Python' 카테고리의 다른 글
[Python] Class (0) 2021.06.20 [Python] 외부 모듈 (0) 2021.06.20 [Python] 예외 처리 try, except, finally (0) 2021.06.20 [Python] 함수 고급 (튜플,map,filter,lambda) (0) 2021.06.20 [Python] 함수의 활용 (0) 2021.06.20