Post

파이썬 기본 문법: 예외 처리

try-except 구문, 예외 종류, 사용자 정의 예외 등

코드를 실행하는 동안 예상치 못한 오류가 발생할 수 있습니다. 파이썬의 예외 처리(Exception Handling)는 이러한 오류를 감지하고 적절히 대응할 수 있도록 도와줍니다. 이번 글에서는 try-except 구문, 예외 종류, 사용자 정의 예외 등을 살펴보겠습니다.


1. 예외란?

  • 예외(Exception): 프로그램 실행 중 발생하는 오류를 의미합니다.
  • 예외가 처리되지 않으면 프로그램이 강제로 종료됩니다.
  • 파이썬에서는 예외를 처리하여 프로그램의 안정성을 높일 수 있습니다.

2. try-except 구문

기본 구조

1
2
3
4
try:
    # 실행할 코드
except 예외타입:
    # 예외 발생 시 실행할 코드

예제

1
2
3
4
5
try:
    x = int(input("숫자를 입력하세요: "))
    print(f"입력한 숫자: {x}")
except ValueError:
    print("유효한 숫자가 아닙니다.")

3. 다양한 예외 처리

1) 여러 예외 처리
여러 종류의 예외를 처리할 때는 각각의 except 블록을 사용할 수 있습니다.

1
2
3
4
5
6
7
try:
    num = int(input("숫자를 입력하세요: "))
    result = 10 / num
except ValueError:
    print("숫자가 아닙니다.")
except ZeroDivisionError:
    print("0으로 나눌 수 없습니다.")

2) 모든 예외 처리
모든 종류의 예외를 처리하려면 except Exception을 사용합니다.

1
2
3
4
try:
    x = 10 / 0
except Exception as e:
    print(f"오류 발생: {e}")

3) else와 finally

  • else: 예외가 발생하지 않았을 때 실행.
  • finally: 예외 발생 여부와 관계없이 항상 실행.
1
2
3
4
5
6
7
8
try:
    x = int(input("숫자를 입력하세요: "))
except ValueError:
    print("유효한 숫자가 아닙니다.")
else:
    print(f"입력한 숫자: {x}")
finally:
    print("프로그램 종료.")

4. 예외의 종류

파이썬에서 자주 발생하는 예외 종류는 다음과 같습니다.

예외 종류설명
ValueError잘못된 값 사용
TypeError잘못된 데이터 타입 사용
IndexError시퀀스의 유효하지 않은 인덱스 접근
KeyError딕셔너리에 없는 키 접근
ZeroDivisionError0으로 나누기 시도
FileNotFoundError존재하지 않는 파일 접근

예제

1
2
3
4
5
try:
    my_list = [1, 2, 3]
    print(my_list[5])
except IndexError:
    print("인덱스가 유효하지 않습니다.")

5. 사용자 정의 예외

파이썬에서는 기본 제공되는 예외 외에도 사용자 정의 예외를 만들 수 있습니다.

예제: 사용자 정의 예외

1
2
3
4
5
6
7
8
9
10
class NegativeNumberError(Exception):
    """음수를 입력했을 때 발생하는 예외"""
    pass

try:
    x = int(input("양수를 입력하세요: "))
    if x < 0:
        raise NegativeNumberError("음수는 허용되지 않습니다.")
except NegativeNumberError as e:
    print(e)

6. 예외 처리 활용 사례

1) 파일 처리에서의 예외 처리

1
2
3
4
5
6
try:
    with open("data.txt", "r") as file:
        content = file.read()
        print(content)
except FileNotFoundError:
    print("파일을 찾을 수 없습니다.")

2) 숫자 입력 검증

1
2
3
4
5
6
while True:
    try:
        x = int(input("숫자를 입력하세요: "))
        break
    except ValueError:
        print("유효한 숫자를 입력하세요.")

3) API 호출에서의 예외 처리

1
2
3
4
5
6
7
8
import requests

try:
    response = requests.get("https://jsonplaceholder.typicode.com/posts/1")
    response.raise_for_status()
    print(response.json())
except requests.exceptions.RequestException as e:
    print(f"API 호출 오류: {e}")

정리

  • try-except: 예외를 감지하고 적절히 처리하여 프로그램의 안정성을 높입니다.
  • else와 finally: 예외가 없는 경우 실행되는 코드와 항상 실행되는 코드를 작성할 수 있습니다.
  • 사용자 정의 예외: 필요에 따라 사용자만의 예외를 정의하여 로직을 명확히 할 수 있습니다.

다음 글 예고:
파이썬의 심화 주제로, “데코레이터와 제너레이터”를 배우며, 고급 기능으로 효율적인 코드를 작성하는 방법을 알아보겠습니다!

This post is licensed under CC BY 4.0 by the author.