Chapter 10 : Python - Exception Handling, Raising Errors (try-except, finally..)

안녕하세요, 오늘은 파이썬의 예외처리에 대해서 배워봤습니다.
예외처리는 코드를 작성하면서
에러가 발생할 수 있는 부분을 미리 지정해서
오류 발생시 어떻게 출력할 것인지 등
말그대로 예외처리를 해 놓는것이라고 보면 됩니다.
# ValueError 예외 처리 예제 코드
try:
num = int(input("정수를 입력하세요: "))
result = 10 / num
print("연산 결과:", result)
except ValueError:
print("잘못된 값이 입력되었습니다!")
# ZeroDivisionError 예외 처리 예제 코드
try:
num = int(input("정수를 입력하세요: "))
result = 10 / num
print("연산 결과:", result)
except ZeroDivisionError:
print("0으로 나눌 수 없습니다!")
except ValueError:
print("잘못된 값이 입력되었습니다!")
except Exception:
print("알 수 없는 예외가 발생했습니다!")
1. 예외 처리 (Exception Handling)
- - try-except 구문은 코드 블록 내에서 예외가 발생할 수 있는 부분을 try 블록으로 감싸고, 발생한 예외를 처리하기 위한 except 블록을 사용합니다.
- ValueError는 숫자 변환 시 잘못된 값이 입력되었을 때 발생하는 예외입니다.
- ZeroDivisionError는 0으로 나누기 연산 시 발생하는 예외입니다.
- Exception은 모든 예외 클래스의 부모 클래스로, 예외 처리 시 가장 마지막에 위치하여 어떤 예외인지 자동으로 알려줍니다.
2. 에러 발생시키기 (Raising Errors)
- - raise 문을 사용하여 특정 조건에 따라 개발자가 직접 예외를 발생시킬 수 있습니다.
- ValueError는 잘못된 값을 입력했을 때 발생하는 예외입니다.
아래의 코드는 ValueError 예외를 발생시키는 예제와
사용자 정의 예외 클래스를 정의하고 처리하는 예제로 구성되어 있습니다.
# ValueError 예외 발생시키기 예제 코드
def calc_square_root(num):
if num < 0:
raise ValueError("음수는 제곱근을 계산할 수 없습니다!")
return num ** 0.5
try:
num = float(input("양수를 입력하세요: "))
result = calc_square_root(num)
print("제곱근 결과:", result)
except ValueError as e:
print(e)
ValueError 예외 발생시키기 예제:
calc_square_root 함수는 입력된 숫자의 제곱근을 계산하는 함수입니다.
(**는 제곱인데 0.5제곱은 루트 씌우는거 아시죠?)
함수 내부에서 입력된 숫자(num)가 음수일 경우
ValueError 예외를 발생시킵니다.
try-except 구문을 사용하여 사용자로부터 양수를 입력받고,
calc_square_root 함수를 호출하여 제곱근을 계산합니다.
만약 입력된 숫자가 음수일 경우 ValueError 예외가 발생하며,
해당 예외를 처리하여 "음수는 제곱근을 계산할 수 없습니다!"라는
메시지를 출력합니다.
3. 사용자 정의 예외처리 (User-defined Exception Handling)
- - 개발자가 직접 예외 클래스를 정의하여 원하는 예외를 처리할 수 있습니다. class BigNumberError(Exception)와 같이 사용자 정의 예외 클래스를 정의할 수 있습니다.
- errmsg()는 예외 객체의 메서드로, 예외 메시지를 반환합니다.
# 사용자 정의 예외 클래스 정의 예제 코드
class BigNumberError(Exception):
def __init__(self, number):
self.number = number
def errmsg(self):
return "입력한 숫자는 너무 큽니다: {}".format(self.number)
# BigNumberError 예외 처리 예제 코드
try:
num = int(input("1부터 100 사이의 숫자를 입력하세요: "))
if num < 1 or num > 100:
raise BigNumberError(num)
print("입력한 숫자:", num)
except BigNumberError as e:
print(e.errmsg())
except Exception:
print("알 수 없는 예외가 발생했습니다!")
1) 사용자 정의 예외 클래스 정의 예제:
BigNumberError는 사용자가 입력한 숫자가 너무 큰 경우에
발생시킬 예외 클래스입니다.
BigNumberError 클래스는 생성자(__init__)를 통해
입력된 숫자(number)를 저장하고,
errmsg 메서드를 통해 예외 메시지를 반환합니다.
2) BigNumberError 예외 처리 예제:
사용자로부터 1부터 100 사이의 숫자를 입력받아 변수 num에 저장합니다.
입력된 숫자가 1보다 작거나 100보다 큰 경우
BigNumberError 예외를 발생시킵니다.
try-except 구문을 사용하여 예외를 처리하고,
입력한 숫자를 출력합니다.
만약 BigNumberError 예외가 발생한 경우 해당 예외를 처리하여
"입력한 숫자는 너무 큽니다: (숫자)"라는 메시지를 출력합니다.
그 외의 다른 예외가 발생한 경우
"알 수 없는 예외가 발생했습니다!"라는 메시지를 출력합니다.
4. Finally 블록
- - finally 구문은 try-except 구문의 마지막에 위치하여, 예외 발생 여부와 상관없이 항상 실행되는 코드 블록입니다.
- "계산기를 이용해 주셔서 감사합니다."는 finally 블록 내에서 출력되는 메시지입니다.
# Finally 블록 예제 코드
try:
num1 = int(input("첫 번째 숫자를 입력하세요: "))
num2 = int(input("두 번째 숫자를 입력하세요: "))
result = num1 / num2
print("나눗셈 결과:", result)
except ValueError:
print("잘못된 값이 입력되었습니다!")
except ZeroDivisionError:
print("0으로 나눌 수 없습니다!")
except Exception:
print("알 수 없는 예외가 발생했습니다!")
finally:
print("계산기를 이용해 주셔서 감사합니다.")
이 코드는 사용자로부터 두 개의 숫자를 입력받아 나눗셈을 수행하는 예제입니다.
코드에 대한 간략한 설명을 하자면 다음과 같습니다.
먼저, try 블록 내에서 사용자로부터 두 개의 숫자를 입력받습니다.
입력받은 숫자를 이용하여 나눗셈 연산을 수행하고,
그 결과를 result 변수에 저장합니다.
except 블록은 여러 개의 예외를 처리하기 위해 사용됩니다.
만약 사용자가 잘못된 값을 입력했을 경우,
ValueError 예외가 발생하며
"잘못된 값이 입력되었습니다!"라는 메시지가 출력됩니다.
만약 사용자가 0으로 나누기를 시도했을 경우,
ZeroDivisionError 예외가 발생하며
"0으로 나눌 수 없습니다!"라는 메시지가 출력됩니다.
위의 두 경우 이외의 다른 예외가 발생했을 경우, Exception 예외가 발생하며
"알 수 없는 예외가 발생했습니다!"라는 메시지가 출력됩니다.
마지막으로 finally 블록은 예외 발생 여부와 상관없이
항상 실행되는 코드 블록입니다.
"계산기를 이용해 주셔서 감사합니다."라는 메시지가 출력됩니다.
오늘은 예외처리 관련해서 공부한 내용을 포스팅 해보았습니다.
이번 내용도 숙지를 위해 실습이 필요할 것 같아서
다음 포스팅도 자체 실습과제를 진행할것 같습니다!
자체 실습을 한다는건 그만큼 연습을 한다는 거니까 좋은 거라고 생각해요:)
그럼 다음 포스팅으로 찾아오겠습니다.
출처 : https://youtu.be/kWiCuklohdY
필자는 해당 링크 영상을 통해 학습하였으나,
포스팅 내용 및 설명은 영상과 다를 수 있음을 알립니다.