cs

진심 다른건 배울 엄두도 안나고, 배울 계획이 없다.. 컴싸들 존경합니다.

 


지난번에 이어서 예외처리 하는 걸 이어간다. 

 

프로그래밍 언어에도 역시 예외와 관련된 정보가 저장된다고 하는데, 그건 모두 예외객체(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

+ Recent posts