지난번에 이어서 예외처리 하는 걸 이어간다.
프로그래밍 언어에도 역시 예외와 관련된 정보가 저장된다고 하는데, 그건 모두 예외객체(exception object) 라는 곳에 저장이 된다고 한다.
예외객체도 역시나 코드 예제 보고 같이 이해해보자.
예외 객체
## 지난번 예제를 가지고오고
try:
#숫자 변환
number_input =int(input("정수입력>")) ##예외가 발생할 수 있다.
print("원의 반지름:", number_input)
print("원의 둘레:", 2*3.14*number_input)
print("원의 넓이:", 3.14*number_input*number_input)
except Exception as exception:
#예외 객체를 출력해보기
print("type(exception):", type(exception))
print("exception:", exception)
그니까 그냥 애러가 떴을때랑 비교해보자면, 예외 객체의 종류는 'Value Error' 라고 다시 알려주고 어떤게 틀렸는지 내가 쓴 입력갑을 출력해준다.
간단한 코드야 그냥 내가 보고 어디가 틀렸는지 알기 쉽겠지만, 코드가 길어지고 큰 규모라면 다양한 애러가 생길 수 있으니, 해당 구문을 이용하여 개선하면 도움이 될 듯하다.
예외 구분하기
예외 객체를 사용하면 if처럼 조건을 사용해서 예외를 구분하고 어떤건지 바로 볼 수있다.
책에서는 이전 단계를 통해 설명을 한번 더 해줬는데, 뒤에 코드를 보니까 그렇게 어려운 것 같지는 않아서 바로 예외를 구분 할 수있는 예제를 실행시켜보겠다.
#변수선언
list_number =[13, 21, 34, 55, 89] # 피보나치 수열 ㅎㅎ
#try excep구문으로 예외 처리
try:
#숫자 입력 받고
number_input = int(input("정수만 써주세요>"))
#리스트 요소 출력
print("{}번째 요소: {}".format(number_input, list_number[number_input]))
except ValueError as exception:
#ValueError가 나오는 경우에는
print("정수를 입력해주세여")
print("exception:", exception)
except IndexError as exception:
#Index Error가 나오는 경우에는
print("리스트가 인덱스를 벗어났는데요?")
print("exception:", exception)
정수를 써달라고했는데 헛소리를하면 착하게 '정수를 입력해주세여'가 나온다.
애러에 대해서 except로 걸어주게되면 해당 문제가 발생할때마다 아래의 구문이 프린트 되도록 설정했다.
if절 처럼 조건만 걸어주면 되는거라 어렵지는 않았다.
아까의 그 exception을 as 키워드로 변경하고 예외 객체를 추가하면 더 정확하다.
모든 예외 잡기
위에서는 내가 지금 Value Error, 그리고 Index Error만 예외를 정리해놨는데, 내가 모르는 거나 내가 인지 하지 못한 애러가 나면??
그런 상황을 대비해서 If ~ else처럼 마지막에 예외의 부모?라고 할수있는 exception을 넣어서 예외를 잡고 프로그램이 죽지 않게 하는게 좋다고 한다.
#변수선언
list_number =[13, 21, 34, 55, 89] # 피보나치 수열 ㅎㅎ
#try excep구문으로 예외 처리
try:
#숫자 입력 받고
number_input = int(input("정수만 써주세요>"))
#리스트 요소 출력
print("{}번째 요소: {}".format(number_input, list_number[number_input]))
예외.를강제로만들어보자() ## 이건 무조건 애러
print()
except ValueError as exception:
#ValueError가 나오는 경우에는
print("정수를 입력해주세여")
print("exception:", exception)
except IndexError as exception:
#Index Error가 나오는 경우에는
print("리스트가 인덱스를 벗어났는데요?")
print("exception:", exception)
#모든 예외를 잡기위해 Exception써주기
except Exception as exception:
print("이건 예상하지 못했습니다!")
print(type(exception), exception)
정수를 잘 입력해주긴 했는데, 뒤에 '예외.'를 넣어버렸으니 애러가 떠야한다.
근데 예외라는 이름의 변수는 없으니까 내가 name애러는 없었지만, 마지막 아래에서 모든 예외에 대해서 대비를 해줘서 예외라는 이름이 없다는 구문까지 잘 끝까지 나왔다.
raise 구문
raise구문의 경우 예외를 강제로 발생시키는 기능을 한다?!
처음에는 이해하기 좀 어려웠는데, 아직 구현되지 않은 부분이니, 일부로 예외를 발생시켜 프로그램을 죽게 만들어서 나 스스로 잊지 않도록 하는 것이라고 한다.
음.. raise를 실행시키는건 그냥 raise 뒤에 예외 이름을 입력해주면 된다.
보통은 아직 구현되지 않은 상태를 보여주기 위해
raise NotImplementedError를 쓴다고 한다.
이 책에서 나오는 기본편은 모두 끝났다.
사실 회사나 혼자 공부할때는 다양한 분석해보려고 이것저것 돌리는게 상당히 많고 분석용으로 파이썬을 쓰다보니, 알게 모르게 어려운 것 까지 많이 배우고 사용했었다.
하지만 그때마다 기초가 부족했고, 문법이나 이런게 참 이해가 안갔는데, 이번에 복습겸 공부를 하다보니 많이 보완이 되는 느낌이다.
빨리 속도 올려서 책 마무리하고, 혼공 머신러닝도 해야지. 캐글도 슬슬하고, 나의 포트폴리오 슬슬 작업해야겠다.
'Data Analysis > Python_Grammar' 카테고리의 다른 글
[혼공파] 외부 모듈 (0) | 2022.03.27 |
---|---|
[혼공파] 표준 모듈 (0) | 2022.03.25 |
[혼공파] 구문 오류와 예외 (0) | 2022.03.18 |
[혼공파] 함수 고급 (0) | 2022.03.09 |
[혼공파] 함수의 활용 + (추가) (0) | 2022.03.02 |