본문 바로가기
Python 기초

[Python] 예외 처리

by 내 코딩 2023. 4. 1.
반응형

예외처리란?

오류 상황에 대처하는 것이 예외 처리이다.

예외 처리하기: try-except 문

try:
    실행할 명령1
    실행할 명령1
    ...
except 오류 종류:
    예외 처리 명령1
    예외 처리 명령2
    ...
try:
    print('나누기 전용 계산기')
    num1 = int(input('첫 번째 수: '))
    num2 = int(input('두 번째 수: '))
    print(f'{num1} / {num2} = {int(num1/num2)}')
except ValueError:
    print('오류 발생 잘못된 값을 입력했습니다.')

입력값에 6와 '삼' 을 넣으면 except 부분의 print() 문이 실행된다.

프로그램을 다시 실행해서 6과 0을 넣으면 다른 에러를 발생 시킨다.

ValueError와는 다른 종류의 오류라서 기존 except 문만으로는 예외 처리를 할 수 없다.

오류 메시지를 예외 처리로 출력하기: as

예외 처리마다 메시지를 직접 작성하기에는 너무 귀찮다.

try:
    실행할 명령1
    실행할 명령1
    ...
except 오류 종류:
    예외 처리 명령1
    예외 처리 명령2
    ...
except 오류 종류2 as 변수명:
    예외 처리 명령1
    예외 처리 명령2
    ...
try:
    print('나누기 전용 계산기')
    num1 = int(input('첫 번째 수: '))
    num2 = int(input('두 번째 수: '))
    print(f'{num1} / {num2} = {int(num1/num2)}')
except ValueError:
    print('오류 발생 잘못된 값을 입력했습니다.')
except ZeroDivisionError as err:
    print(err)

 

오류 발생시키기

직접 작성한 프로그램에서 허용하지 않는 동작을 하려고 할 때도 의도적으로 오류를 발생시킬 수 있다.

raise 오류 종류

입력받은 숫자가 10 이상일 때 의도적으로 ValueError를 발생시키겠다.

try:
    print('나누기 전용 계산기')
    num1 = int(input('첫 번째 수: '))
    num2 = int(input('두 번째 수: '))
    if num1 >= 10 or num2 >= 10:
        raise ValueError
    print(f'{num1} / {num2} = {int(num1/num2)}')
except ValueError:
    print('오류 발생 잘못된 값을 입력했습니다.')
except ZeroDivisionError as err:
    print(err)

 

사용자 정의 예외 처리

두자리 이상을 입력했을 때 발생하는 오류 BigNumberError 라는 클래스를 만든다.

코드에서 새로운 오류를 정의해 예외 처리하려면 파이썬에 포함된 Exception이라는 클래스를 상속해야 한다.

class BigNumberError(Exception):
    pass


try:
    print('나누기 전용 계산기')
    num1 = int(input('첫 번째 수: '))
    num2 = int(input('두 번째 수: '))
    if num1 >= 10 or num2 >= 10:
        raise BigNumberError
    print(f'{num1} / {num2} = {int(num1/num2)}')
except ValueError:
    print('오류 발생 잘못된 값을 입력했습니다.')
except BigNumberError:
    print('한 자리 숫자만 입력하세요.')

 

오류와 상관없이 무조건 실행하기: finally

try:
    실행할 명령1
    실행할 명령1
    ...
except 오류 종류:
    예외 처리 명령1
    예외 처리 명령2
    ...
except 오류 종류2 as 변수명:
    
    예외 처리 명령1
    예외 처리 명령2
    ...
finally:
    실행할 명령1
    실행할 명령2
    ...
class BigNumberError(Exception):
    pass


try:
    print('나누기 전용 계산기')
    num1 = int(input('첫 번째 수: '))
    num2 = int(input('두 번째 수: '))
    if num1 >= 10 or num2 >= 10:
        raise BigNumberError
    print(f'{num1} / {num2} = {int(num1/num2)}')
except ValueError:
    print('오류 발생 잘못된 값을 입력했습니다.')
except BigNumberError:
    print('한 자리 숫자만 입력하세요.')
finally:
    print('계산기가 종료됐습니다.')

오류 발생 여부와 상관없이 finally 문을 실행한다.

'Python 기초' 카테고리의 다른 글

[Python] 클래스 정리  (0) 2023.03.29
[Python] 입출력 정리  (0) 2023.03.25
[Python] 함수 정리  (0) 2023.03.22
[Python] 제어문 정리  (0) 2023.03.19
[Python] 자료구조 정리  (0) 2023.03.19

댓글