Python : 예외 처리

Jinsung·2021년 10월 23일
0

python

목록 보기
19/25
post-thumbnail
post-custom-banner

예외 처리

예외처리는 잘못된 동작 시 오류를 발생하는데 이런 오류를 무시하거나 오류를 처리할 수 있게 하는 기능

구조

try:
	내용
    	내용
except:
	오류처리내용
    
try:
	내용
    	내용
except 발생 오류:
	오류처리내용
    
try:
	내용
    	내용
except 발생 오류 as 발생 오류 변수:
	오류처리내용

나누기 계산기 예시

# 예외처리
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: # 0으로 나눌수 없다는 오류 
    print(err)
except Exception as err: # 위에 2가지 에러 외 다른 에러처리는 여기서 처리
    print("알 수 없는 에러가 발생하였습니다.")
    print(err)

중간에러 발생시 에러 처리 방법(오류를 일부러 발생)

raise 발생오류

# 중간에 오류 발생시 작동하게 하는 방법
try:
    print("한 자리 숫자 나누기 전용 계산기입니다.")
    num1 = int(input("첫 번째 숫자를 입력하세요 : "))
    num2 = int(input("두 번째 숫자를 입력하세요 : "))
    if num1 >= 10 or num2 >= 10:
        raise ValueError # 특정 에러 발생시 except 로 넘어감 즉 밑에 문장은 실행 되지 않는다.
        print("{0} / {1} = {2}".format(num1, num2, int(num1 / num2)))
except ValueError:
    print("잘못된 값을 입력하였습니다. 한 자리 숫자만 입력하세요.")

오류 회피하기

pass 이용

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: # 모든 에러는 넘긴다.
    pass

입력값 확인 후 에러 메세지 출력

class BigNumberError(Exception):
    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

잘 작동하든 예외 처리하든 상관없이 무조건 실행되는 구문

class BigNumberError(Exception):
    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("계산기를 이용해 주셔서 감사합니다.")
post-custom-banner

0개의 댓글