Python 예외처리 기본개념
2022-03-19
.
Python_studynote(20220319)
[학습자료]
패스트 캠퍼스 “초격차 패키지 : 한 번에 끝내는 파이썬 웹 개발” 강의를 공부하고 정리한 내용입니다.
** URL : https://fastcampus.co.kr/dev_online_pyweb
[학습내용]
- try, except
try:
예외가 발생할 수 있는 구문
except:
예외발생시 실행할 코드
else:
예외가 발생하지 않는 경우 실행할 코드
finally:
항상 실행할 코드
- try, except 에시
원화를 입력하고, 환율을 입력하면 달러값으로 변환하는 프로그램
won = input("원화금액을 입력 하세요>>>")
dollar = input("환율을 입력 하세요>>>")
try: # 예외가 발생 할 수 있는 코드
print(int(won) / int(dollar))
# 예외가 발생했을 때 실행되는 코드로 그냥 except: 로 처리해도 되지만
# 사용자가 except 시 에러를 아래와 같이 지정할 수 있다.
# 아래와 같이 except: Error를 작성하여
# 사용자가 지정한 에러를 레이징 할 수 있도록 지정도 가능하다
# as e(error 메세지) 를 붙여주게 되면 출력할때 아래와 같이 에러메세지도
# 같이 출력이 가능하다.
except ValueError as e:
print("예외가 발생했습니다.", e)
except ZeroDivisionError as e:
print("예외가 발생했습니다.", e)
else:
print("예외가 발생하지 않았을 때 실행되는 코드")
# 파일을 열고나서 뭔가 실행을 하고 파일 닫기를 해줘야 하는 등 리소스 반환이 필요한 경우에는 finally를 쓰게된다.
finally:
print("예외가 발생하던지, 발생하지 않던지 항상 실행되는 코드")
정상적으로 입력이 된 경우
원화금액을 입력 하세요>>>1000000
환율을 입력 하세요>>>1200
833.3333333333334 USD
예외가 발생하지 않았을 때 실행되는 코드
예외가 발생하던지, 발생하지 않던지 항상 실행되는 코드
입력값에 문자열을 넣었을 경우 –> ValueError
원화금액을 입력 하세요>>>text
환율을 입력 하세요>>>qwe
예외가 발생했습니다. invalid literal for int() with base 10: 'text'
예외가 발생하던지, 발생하지 않던지 항상 실행되는 코드
달러에 0을 넣었을 경우 –> ZeroDivisionError
원화금액을 입력 하세요>>>100000
환율을 입력 하세요>>>0
예외가 발생했습니다. division by zero
예외가 발생하던지, 발생하지 않던지 항상 실행되는 코드
- raise는 에러를 강제로 만들기 위한 구문이다.
사용법은 아래와 같다.
raise 예외("에러 메세지")
아래와 같은 예외 계층구조를 이용해서 에러메세지를 세부적으로 구현할 수 있다.
raise 구문을 사용해서 에러를 강제로 발생시키는 예시 : 음수를 입력 받는 프로그램
try:
num = int(input("음수를 입력해 주세요>>>"))
if num >= 0:
raise ValueError("양수는 입력 불가")
except ValueError as e:
print("에러 발생!", e)
정상실행되는 경우
음수를 입력해 주세요>>>-2
양수를 입력해서 예외상황이 될때
음수를 입력해 주세요>>>2
에러 발생! 양수는 입력 불가
문자열을 입력해서 예외상황이 될때
음수를 입력해 주세요>>>aaa
에러 발생! invalid literal for int() with base 10: 'aaa'
아래와 같이 PositiveNumberError라는 커스텀한 에러를 만들수도 있다.
Exception 클래스를 상속받아서 아래와 같이 만들면 된다.
class PositiveNumberError(Exception):
def __init__(self):
super().__init__("양수는 입력 불가")
try:
num = int(input("음수를 입력해 주세요>>>"))
if num >= 0:
raise PositiveNumberError
except PositiveNumberError as e:
print("에러 발생!", e)
양수를 넣어서 실행하면 아래와 같이 커스텀 에러가 발생한다.
음수를 입력해 주세요>>>11
에러 발생! 양수는 입력 불가