python - 예외처리 : try,except 심화

권수민·2023년 8월 21일
1

저번 try except::
https://velog.io/@stella_k/python-tuple-set-f-string-try-except%ED%8C%8C%EC%9D%BC%EB%B6%84%EB%A6%AC-%EC%82%BC%ED%95%AD%EC%97%B0%EC%82%B0%EC%9E%90-mapfilterlambda-%EC%8B%9D-%ED%95%A8%EC%88%98%EC%8B%AC%ED%99%94-%ED%81%B4%EB%9E%98%EC%8A%A4-%EC%A0%95%EB%A6%AC

앞에서 이미 말한 예외처리에 대해 조금 더 알아보도록하겠다.

이 예외처리란?
파일을 실행시킬때 에러가 발생하면 그 즉시 중단되면서 파일이 멈추고 에러를 알려주는데, 중단을 시키지 않고(특히 데이터 처리등, 볼륨이 큰 파일실행시) 실행을 끝까지 시켜주면 에러를 알려주는 함수라고 보면된다.

number = "num"

try: # try 구문 안에서 에러가 발생할 경우 except로 넘어감
    number = int(number) # "num"을 숫자로 바꾸는 과정에서 에러 발생
except: # 에러가 발생했을 때 처리
    print(f"{number}은(는) 숫자가 아닙니다.")

이것이 저번에 알아봤던 간단한 구조의 예외처리였다.
하지만 어떠한 에러가 난건지 나눠주지 않고 모든 예외를 except를 처리할 경우 추후 에러발생시 디버깅하기에 어려움이 있을 수 있다.

심화

number = input()

try:
    int(number)
    10 / number

except ValueError: # int로 변환하는 과정에서 에러가 발생했을 떄
    print(f"{number}은(는) 숫자가 아닙니다.")
    
except ZeroDivisionError: # 0으로 나누면서 에러가 발생했을 때
    print("0으로는 나눌수 없습니다.")
    
except Exception as e: # 위에서 정의하지 않은 에러가 발생했을 때(권장하지 않음)
    print(f"예상하지 못한 에러가 발생했습니다. error : {e}")

# except 문법 또한 if / elif와 같이 연달아서 작성할 수 있습니다.

ValueError,ZeroDivisionError ::
이 에러들은 애초에 에러가 발생시 파일이 중단되며 어떠한 에러인지 파워쉘에 띄어주는데 그 에러를 넣어 붙혀준것이다.

이러한 형태로 쉘에 뜬다. 'ValueError : 자세히 / ZeroDivisionError : 자세히'

Exception as e

이건 바로 위에서 정의되지않은 에러가 발생시 모든 예외처리를 여기서 처리하겠다라는 건데
마찬가지로 다른 예외처리를 다 넘겨주기 떄문에 추우 디버깅시 어려움이 생길 수 있어 남용 x

as e 는 그 에러 예외를 e로 담아 에러처리를 "error : {e}" 담아 프린트 해준다.

주의
너무 exect를 남발하면 정확히 어떤 부분의 에러인지 파악하기 쉽지않아
Exception 역시 마찬가지이다! 그렇기에 남용은 금물!

profile
초보개발자

0개의 댓글