앞에서 이미 말한 예외처리에 대해 조금 더 알아보도록하겠다.
이 예외처리란?
파일을 실행시킬때 에러가 발생하면 그 즉시 중단되면서 파일이 멈추고 에러를 알려주는데, 중단을 시키지 않고(특히 데이터 처리등, 볼륨이 큰 파일실행시) 실행을 끝까지 시켜주면 에러를 알려주는 함수라고 보면된다.
예
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 역시 마찬가지이다! 그렇기에 남용은 금물!