-
76 - (파이썬) 예외 객체와 예외 구분study with Q - 파이썬 2024. 8. 21. 16:49
# 예외 객체 : 예외와 관련된 정보를 담고 있는 객체
try: except 예외의_종류 as 예외_객체의_변수_이름: #NameError as e #IndexError as exeption #ValueError #Exception (aka 모든 예외들의 부모) #예외_객체의_변수_이름은 exeption이나 e를 사용한다
try: 변수없다[0] #NameError가 발생할 수 있게 존재하지 않는 변수의 0번째 인덱스에 접근 except Exception as e: print(type(e)) print(e) >>> <class 'NameError'> name '변수없다' is not defined
뭐 사실 e는 객체로 단순한 문자열이 아닌 여러 개의 속성들을 가지고 있는데, print 함수로 출력할 때 자동으로 문자열로 변환해서 출력하기 때문에 name '변수없다' is not defined로 나오게 되는 것.
# 조건문으로 예외 구분하기
: except에 조건문으로 처리를 해서 어떤 예외인지 구분을 하고 그에 따른 처리를 넣을 수도 있다.
try: [무슨 무슨 프로그램, 사용자에게 입력을 받고 네트워크로 전송하는 뭐 그런거] #NameError가 발생할 수 있게 존재하지 않는 변수의 0번째 인덱스에 접근 except Exception as e: if type(e) == ValueError: print("정상적인 입력값이 아닙니다.") elif type(e) == ConnectionError: print("네트워크 연결을 다시 확인 후 시도해주세요.") else: i = input("오류 내용을 전송하시겠습니까? [Y/N]") if i in ["Y", "y"]: 메일전송(type(e), str(e))
But...
들여쓰기가 너무 많아 > 안멋쪄
> 이러한 문법을 쉽게 작성할 수 있는 코드를 제공해준다.
try: [무슨 무슨 프로그램, 사용자에게 입력을 받고 네트워크로 전송하는 뭐 그런거] except ValueError as e: print("정상적인 입력값이 아닙니다.") except ConnectionError as e: print("네트워크 연결을 다시 확인 후 시도해주세요.") except Exception as e: i = input("오류 내용을 전송하시겠습니까? [Y/N]") if i in ["Y", "y"]: 메일전송(type(e), str(e))
위와 같은데 들여쓰기도 더 적고 코드 이즈 깔끔깔끔
참고로)
코드는 위에서 부터 읽어드리기 때문에 except Exception as e:가 가장 상단에 있다면 모든 예외가 '오류 내용 전송'처리 되어버린다.
그렇지만 except Exceptionas e:가 없다면 입력한 특정 에러가 아닐 경우 프로그램이 죽어버리게 된다.
참고로 2)
프로그램이 무조건 죽지 않는게 마냥 좋은 것은 아닌데, 살아도 사는게 아닐 수 있다. (오히려 더 위험할 수도)
'study with Q - 파이썬' 카테고리의 다른 글
78 - (파이썬) 객체 지향 프로그래밍 (1) 2024.08.26 77 - (파이썬) 예외 강제 발생 (0) 2024.08.21 75 - (파이썬) 예외 처리의 else finally 구문 (0) 2024.08.21 74 - (파이썬) 예외 처리의 try except 구문 (0) 2024.08.12 73 - (파이썬) 기본적인 예외처리 방법 (0) 2024.08.09