Python기초강의강좌, 파이썬기초강의강좌, 예외 발생시키기
#039 파이썬 기초 - 예외 처리 II
지난 시간에 try... except 문을 배웠습니다.
이번 시간에는 예외를 발생시키는 방법에 대해서 알아보겠습니다.
예외 발생시키기
이상하게 들리겠지만 프로그래밍을 하다 보면 종종 오류를 일부러 발생시켜야 할 경우도 생깁니다. 파이썬은 raise 문을 사용해 오류를 강제로 발생시킬 수 있습니다.
raise 문에 오류/예외의 이름을 넘겨주는 것을 통해 예외를 직접 발생(raise) 시킬 수 있습니다. 그러면 예외 객체가 throw 됩니다.
이때 발생시킬 수 있는 오류나 예외는 반드시 직접적으로든 간접적으로든 Exception 클래스에서 파생된 클래스이어야 합니다.
예제 ( exceptions_raise1.py로 저장하세요):
# Filename : exceptions_raise1.py
# -*- coding:utf-8 -*-
class ShortInputException(Exception):
'''사용자 정의 예외 클래스'''
def __init__(self, length, atleast):
Exception.__init__(self)
self.length = length
self.atleast = atleast
try:
text = input('Enter something --> ')
# 입력이 3보다 작으면, 예외 처리
if len(text) < 3:
raise ShortInputException(len(text), 3)
# 추가 작업은 여기서부터 작성
except EOFError:
print('Why did you do an EOF on me?')
except ShortInputException as ex:
print(('ShortInputException: The input was ' + \
'{0} long, expected at least {1}')\
.format(ex.length, ex.atleast))
else:
print('No exception was raised.')
▶ 실행 결과:
# 정상
C:\Anaconda\envs\study_39\python.exe E:\python_study\exceptions_raise.py
Enter something --> 123
No exception was raised.
# EOFError
C:\Anaconda\envs\study_39\python.exe E:\python_study\exceptions_raise.py
Enter something --> ^D
Why did you do an EOF on me?
# ShortInputException
C:\Anaconda\envs\study_39\python.exe E:\python_study\exceptions_raise.py
Enter something --> 12
ShortInputException: The input was 2 long, expected at least 3
▶ 동작 원리:
위 예제에서는 ShortInputException이라고 불리는 새로운 예외 형식을 직접 하나 만들어 보았습니다. 여기에는 두 개의 필드가 있습니다. 하나는 length 필드로 주어진 입력의 길이를 의미하며, 또 하나는 atleast 필드로 프로그램이 요구하는 최소한의 길이를 의미합니다.
이제 except 절에서 as를 이용하여 해당 오류의 클래스를 좀 더 짧은 이름의 변수로 대신하여 사용할 수 있게 해 줍니다. 여기서 새로 정의한 예외 형식에 정의한 필드와 값의 관계는 마치 함수에서의 매개 변수와 인수의 관계와 비슷합니다. 마지막으로 이 오류를 처리해 주는 except절에서는 해당 예외 객체의 length와 atleast 필드를 이용하여 사용자에게 적절한 결과를 출력해 줍니다.
예제를 하나 더 보겠습니다. ( exceptions_raise2.py로 저장하세요):
# Filename : exceptions_raise2.py
def divide(a, b):
if b == 0:
raise ZeroDivisionError("Cannot divide by zero")
return a / b
try:
a = int(input('a --> '))
b = int(input('b --> '))
result = divide(a, b)
print("The result is:", result)
except ZeroDivisionError as e:
print("Error:", e)
▶ 실행 결과:
# 정상
C:\Anaconda\envs\study_39\python.exe E:\python_study\exceptions_raise2.py
a --> 10
b --> 2
The result is: 5.0
# Error
C:\Anaconda\envs\study_39\python.exe E:\python_study\exceptions_raise2.py
a --> 10
b --> 0
Error: Cannot divide by zero
▶ 동작 원리:
이 예에서는 두 개의 인수 a와 b를 사용하는 divide라는 함수를 정의합니다. 이 함수는 먼저 b가 0인지 여부를 확인합니다. 그렇다면 함수는 "0으로 나눌 수 없습니다"라는 메시지와 함께 ZeroDivisionError 예외를 발생시킵니다. b가 0이 아닌 경우 함수는 a를 b로 나눈 결과를 계산하고 반환합니다.
그런 다음 try-except 블록을 사용하여 인수 10과 0으로 divide 함수를 호출합니다. 0으로 나누려고 하기 때문에 함수는 ZeroDivisionError 예외를 발생시키고 제외 블록. 0으로 나누기 때문에 작업을 수행할 수 없음을 나타내는 오류 메시지가 콘솔에 인쇄됩니다.
요약
위 예들은'raise' 문을 사용하여 특정 조건이나 상황에 대한 응답으로 의도적으로 예외를 발생시키는 방법을 보여줍니다.
그렇게 함으로써 프로그램은 충돌을 일으키거나 정의되지 않은 동작을 생성하는 대신 오류를 정상적으로 처리하고 사용자에게 의미 있는 피드백을 제공할 수 있습니다.
다음 시간에 예외 처리에 대해서 더 알아보도록 합니다.
감사합니다.
Do it! SQL을 찾아 주셔서 감사합니다. ♥ 댓글이 큰 힘이 됩니다. |
'IT > 파이썬 기초 (Python)' 카테고리의 다른 글
#041 파이썬 기초 - 표준 라이브러리 (87) | 2023.03.24 |
---|---|
#040 파이썬 기초 - 예외 처리 III (115) | 2023.03.23 |
#038 파이썬 기초 - 예외 처리 I (102) | 2023.03.21 |
#037 파이썬 기초 - 입력과 출력 III (91) | 2023.03.20 |
#036 파이썬 기초 - 입력과 출력 II (121) | 2023.03.19 |
댓글