2.7 Palatable Python_Basic Syntax#6_Exception

mseokq23·2025년 1월 6일

Palatable Python

목록 보기
10/11

2.7 Exception

2.7.1 Exception?

예외는 프로그램 실행 도중 예상치 못한 상황에서 발생하는 오류를 뜻한다.
예를 들어, 0으로 나누려고 하거나, 존재하지 않는 파일을 열려고 시도하는 경우가 해당된다.

2.7.2 Why use Exception?

  • 프로그램 중단 방지: 예외가 발생했을 때, 곧바로 프로그램이 종료되지 않고 적절히 처리하여 계속 실행할 수 있게 한다.
  • 에러 원인 파악: 에러 메시지를 명확히 출력하거나 로깅(logging)하여, 에러가 발생한 원인을 쉽게 파악할 수 있게 한다.
  • 코드 가독성: 예외 처리를 코드 흐름에 맞게 구성하면, 예외 상황을 명확히 구분할 수 있어 유지보수가 편해진다.

2.7.3 Try-except(Basic exception)

파이썬에서 예외를 처리할 때 가장 기본적으로 사용하는 try-except 구문

try:
    # 예외가 발생할 가능성이 있는 코드
    x = 10 / 0
    print("이 코드는 실행되지 않는다.")
except ZeroDivisionError:
    # 예외 발생 시 실행할 코드
    print("0으로 나눌 수 없다.")

여러개의 except를 사용할 경우 아래와 같이 작성가능

try:
    user_input = input("숫자를 입력해 달라: ")
    num = int(user_input)
    result = 100 / num
    print(f"결과: {result}")
except ValueError:
    print("올바른 숫자를 입력해 달라.")
except ZeroDivisionError:
    print("0으로 나눌 수 없다.")

2.7.4 else

try-except 구문에는 else 절을 추가로 사용가능. else는 예외가 발생하지 않았을 때만 실행됨.

try:
    num = int(input("숫자를 입력해 달라: "))
except ValueError:
    print("숫자가 아닌 값을 입력했다.")
else:
    print(f"입력한 숫자는 {num}이다.")

위 예시에서 int(input()) 부분에서 예외(ValueError)가 발생하지 않으면 else 내부의 코드를 실행하고, 예외가 발생하면 except 블록만 실행됨.

2.7.5 finally

finally 구문은 예외 발생 여부와 관계없이 항상 실행되는 블록. 예를 들어, 파일 입출력 시 파일을 정상적으로 닫는 작업을 finally에서 처리할 수 있음.

try:
    f = open("some_file.txt", "r")
    content = f.read()
    print(content)
except FileNotFoundError:
    print("파일을 찾을 수 없다.")
finally:
    print("예외 발생 여부와 상관없이 실행되는 부분이다.")
    f.close()  # 파일을 열었다면 반드시 닫아야 한다.

위 코드에서는 파일이 존재하지 않아 예외가 발생해도, 혹은 정상적으로 파일을 읽었어도 finally 블록이 실행되어 파일을 닫음.

2.7.6 raise

raise는 의도적으로 발생시키는 예외임.
프로그래머가 의도적으로 예외를 발생시킬 수 있음. 특정 상황에서 원하는 예외를 raise 키워드로 던져, 에러를 알리고 except 블록에서 처리하도록 할 수 있음.

def divide(a, b):
    if b == 0:
        raise ZeroDivisionError("0으로 나누려 했다.")
    return a / b

try:
    result = divide(10, 0)
except ZeroDivisionError as e:
    print(e)

raise를 통해 원하는 예외 타입과 메시지를 명시할 수 있음. 함수 내부에서 에러 조건을 감지하면 바로 예외를 발생시켜 상위 코드에서 처리하게 만들 수 있음.

2.7.7 Custom Exception

표준 라이브러리에서 제공하는 예외 타입 외에, 필요하다면 사용자가 직접 예외 클래스를 정의가능. 일반적으로 파이썬의 내장 Exception 클래스를 상속받아 구현.

class MyCustomError(Exception):
    """사용자 정의 예외 클래스"""
    pass

def check_value(value):
    if value < 0:
        raise MyCustomError("값이 음수다!")
    else:
        print(f"값이 정상이다: {value}")

try:
    check_value(-5)
except MyCustomError as e:
    print("MyCustomError가 발생했다.")
    print(e)

위 코드에서는 MyCustomError라는 새로운 예외 클래스를 만들고, 특정 조건(value < 0)에서 이를 발. 이렇게 정의한 예외는 except MyCustomError:와 같이 별도로 처리할 수 있음.

이제 기초문법 끝.

0개의 댓글