sm 기술 블로그
15. 예외처리 (try~except/ 예외 발생 /finally) 본문
기본 구조
try :
수행하다 에러가 발생 할 수 있는 부분
except 에러 타입 [생략가능] :
에러가 발생 했을 때 실행 할 동작
except 뒤에 에러타입은 생략이 가능하지만, 특정 에러에 대해 처리하고 싶은 것이 있다면 써 주어야 한다.
예제
# 예외처리
try:
print("나누기 전용 계산기 입니다.")
nums = []
nums.append(int(input("첫 번째 숫자를 입력하세요 : ")))
nums.append(int(input("두 번째 숫자를 입력하세요 : ")))
nums.append(int(nums[0] / nums[1]))
print("{0} / {1} = {2}".format(nums[0], nums[1], nums[2]))
except ValueError:
print("에러! 잘못된 값을 입력하였습니다.")
except ZeroDivisionError as err:
print(err)
except Exception as err:
print("알 수 없는 에러가 발생하였습니다.")
print(err)
#에러는 실행 후 어떤 에러가 발생하는지 알 수 있다.
ValueError : 잘못된 값을 입력했을 경우에 발생하는 에러
ZeroDivisionError : 값을 0으로 나누려고 할 때 발생하는 에러
Exception : 모든 에러를 포용한다. -> as err를 붙여줌으로써 어떤 에러인지 확인할 수 있다.
finally
에러 유무에 관계없이 무조건 수행된다.
기본 구조
finally :
수행할 동작
예외 정의 + finally
class BigNumberError(Exception):
# pass
def __init__(self, msg):
self.msg = msg
def __str__(self):
return self.msg
try:
print("한 자리 숫자 나누기 전용 계산기 입니다.")
num1 = int(input("첫 번째 숫자를 입력하세요 : "))
num2 = int(input("첫 번째 숫자를 입력하세요 : "))
if num1 >= 10 or num2 >=10:
raise BigNumberError("입력값 : {0}, {1}".format(num1, num2))
print("{0} / {1} = {2}".format(num1, num2, int(num1 / num2)))
# except ValueError:
# print("잘못된 값을 입력하였습니다. 한 자리 숫자만 입력하세요.")
# #프로그램에서 정의된 에러
except BigNumberError as err:
print("에러가 발생하였습니다. 한 자리 숫자만 입력하세요.")
print(err)
#사용자가 정의한 에러
finally :
print("계산기를 이용해 주셔서 감사합니다.")
# 에러가 발생하든 말든 수행된다.
BigNumberError라는 예외 클래스를 만들어 준다. (ValueError는 시스템상에 존재하는 에러 클래스)
raise를 통해 뒤 구문은 실행되지 않고 바로 예외로 갈 수 있도록 만든다.
(의도적으로 예외를 처리하도록 하는 방법)
finally는 예외가 처리되든 실행 된다.
# 정상동작한 경우
한 자리 숫자 나누기 전용 계산기 입니다.
첫 번째 숫자를 입력하세요 : 6
첫 번째 숫자를 입력하세요 : 3
6 / 3 = 2
계산기를 이용해 주셔서 감사합니다.
# 예외가 발생한 경우
한 자리 숫자 나누기 전용 계산기 입니다.
첫 번째 숫자를 입력하세요 : 10
첫 번째 숫자를 입력하세요 : 5
에러가 발생하였습니다. 한 자리 숫자만 입력하세요.
입력값 : 10, 5
계산기를 이용해 주셔서 감사합니다.
'Python' 카테고리의 다른 글
[파이썬 Python] 2차원 배열 생성 (0) | 2022.05.30 |
---|---|
16. 모듈 / 패키지 / pip install / 외장,내장함수 (0) | 2022.05.08 |
14. 텍스트 스타크래프트 (0) | 2022.05.08 |
13. 파일 입출력 / pickle / with (0) | 2022.05.05 |
12. 표준 출력(sep, sys, ljust, rjust, zfill, input) / 출력포맷 (0) | 2022.05.05 |
Comments