[개발자 로드맵]/파이썬
[혼자 공부하는 파이썬] 예외 객체, 예외 강제 발생
Ramrider
2023. 9. 26. 11:23
728x90
반응형
예외 객체
# 누가 언제 어디서 무엇을 어떻게 왜?
# 프로그래밍에서도 예외가 발생하게 되었을 때
# 예외에 대한 정보를 담고 있는 객체가 예외 객채
try :
dasdasd[0]
except Exception as e:
print(type(e))
print(e)
#except 예외의 종류 as 예외_객체의_변수_이름:
#NameError as e
#IndexError as exception
#ValueError
#Exception : 초보자 단계에서는 예외 종류들을 모를 수 있는데,
#이때 Exception은 모든 예외의 부모라서 이것을 사용하면 된다
# 예외 문법을 이런식으로 활용할 수 있다
try:
[사용자로부터 어떤 입력을 받고, 네트워크로 그걸 전송하는 프로그램]
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))
# 예외 구분 문법
# 코드의 가독성이 떨어지기 떄문에 이런식으로 작성을 하게 된다
try:
[사용자로부터 어떤 입력을 받고, 네트워크로 그걸 전송하는 프로그램]
except ValueError:
print("값을 다시 제대로 입력해주세요")
except ConnectionError:
print("인터넷 연결에 문제가 있습니다")
except Exception as e:
i = input("오류 내용을 전송하시겠습니까?[Y/N]")
if i in ["Y", "y"]:
메일보내기(type(e), str(e))
# excpet Exception as e 는 가장 마지막에 위치해야한다.
# 가장 상단에 위치해버리면 밑에 except 구문들은 동작하지않는다.
# ValueError나 ConnectionError는 as e를 할 필요가 없으므로
# 생략하여도 무방
# 이렇게 되면 프로그램이 죽지 않는데,
# 좀비 프로그램은 죽는 것보다 더 위험하므로 조심해야한다.
예외 강제 발생
raise 구문
# raise 예외객체
# raise 예외객체()
# raise 예외객체(메시지)
raise Exception("예외를 강제로 발생시킵니다.")
활용 예(1): 미구현 상태 전달하기
# 왜 예외를 강제로 발생시키는 것일까?
# 활용 예(1) : 미구현 상태 전달하기
# 기본적으로 예외를 강제로 발생시키는 이유는
# 다른 개발자에게 정보를 전달하기 위해서 이다.
# 따라서 이번 활용 예는 미구현 상태 라는 정보를 전달하는 예 이다.
# 아래처럼 미구현된 부분을 pass로 작성해 놓으면
# 3자는 의도한 pass인지 아닌지 구분이 어렵다
number = input("정수 입력> ")
number = int(number)
if number > 0:
print("양수입니다")
elif number == 0:
pass
else:
pass
# 이런식으로 raise를 사용하여 명시적으로 표현이 가능하다
number = input("정수 입력> ")
number = int(number)
if number > 0:
print("양수입니다")
elif number == 0:
raise Exception("아직 구현되지 않았습니다.")
else:
raise Exception("아직 구현되지 않았습니다.")
# 이 구문은 많이 사용되기 때문에
# NotImplementedError라고 예외 객체가 만들어져 있음
# 이때 장점은 코드 검색을 통해서 구현이 안된 곳을 빨리 찾을 수 있다.
number = input("정수 입력> ")
number = int(number)
if number > 0:
print("양수입니다")
elif number == 0:
raise NotImplementedError("아직 구현되지 않았습니다.")
else:
raise NotImplementedError("아직 구현되지 않았습니다.")
활용 예(2): 이렇게 하면 안된다 전달하기
# 활용 예(2): 이렇게하면 안된다 전달하기
# 사용자가 너비나 높이에 0이나 -1을 넣는 경우도 있다
def 사각형넓이구하기(너비, 높이):
if 너비 <= 0 or 높이 <=0 :
raise ValueError("너비와 높이는 양수여야합니다")
return 너비 * 높이
print(사각형넓이구하기(0, -1))
728x90
반응형