파이썬 예외 처리(Try-Except) 제대로 사용하는 방법

프로그램을 작성하다 보면 예상치 못한 상황이 발생할 수 있습니다.
사용자가 잘못된 입력을 하거나, 파일이 존재하지 않거나, 네트워크 연결이 끊어지는 등 다양한 문제가 생기죠.

이때 프로그램이 갑자기 멈추지 않고 부드럽게 문제를 처리하려면 예외 처리(Exception Handling)가 필요합니다.
파이썬에서는 try-except 구문을 통해 쉽고 간단하게 예외를 다룰 수 있습니다.


본문

1. 예외(Exception)란?

예외란 프로그램 실행 중에 발생하는 예상하지 못한 오류를 말합니다.
예를 들어, 0으로 나누기를 시도하거나 존재하지 않는 파일을 열려고 할 때 예외가 발생합니다.

예외를 처리하지 않으면 프로그램은 즉시 종료되기 때문에, 에러를 미리 대비하고 대응하는 것이 매우 중요합니다.


2. try-except 기본 구조

파이썬에서는 try-except 구문을 사용하여 예외를 처리할 수 있습니다.
기본 구조는 다음과 같습니다.

try:
    # 오류가 발생할 수 있는 코드
except 예외타입:
    # 오류가 발생했을 때 실행할 코드

 

  • try 블록: 오류가 발생할 가능성이 있는 코드를 작성합니다.
  • except 블록: 오류가 발생했을 때 실행할 코드를 작성합니다.

3. 예제: 사용자 입력 다루기

아래는 사용자로부터 숫자를 입력받아 10을 나누는 간단한 예제입니다.

try:
    num = int(input("숫자를 입력하세요: "))
    print(10 / num)
except ZeroDivisionError:
    print("0으로 나눌 수 없습니다!")
except ValueError:
    print("유효한 숫자를 입력해주세요!")
  • 사용자가 0을 입력하면 ZeroDivisionError가 발생합니다.
  • 숫자가 아닌 문자를 입력하면 ValueError가 발생합니다.

에러에 맞게 친절한 메시지를 출력하고 프로그램이 계속 실행될 수 있도록 합니다.


4. 모든 예외를 한 번에 처리하고 싶을 때

특정 예외를 지정하지 않고 모든 예외를 한 번에 처리하고 싶다면 Exception 클래스를 사용할 수 있습니다.

try:
    # 코드 실행
except Exception as e:
    print(f"에러 발생: {e}")

단, 모든 에러를 무조건 잡아버리면 문제가 숨겨질 수 있으니 상황에 따라 신중하게 사용해야 합니다.


5. else와 finally 블록 활용하기

try-except 구문은 else와 finally 블록을 함께 사용할 수 있습니다.

  • else: 예외가 발생하지 않았을 때 실행
  • finally: 예외 발생 여부와 관계없이 무조건 실행
try:
    num = int(input("숫자를 입력하세요: "))
except ValueError:
    print("숫자가 아닙니다.")
else:
    print(f"입력한 숫자는 {num}입니다.")
finally:
    print("프로그램을 종료합니다.")

 

특히 finally는 파일을 닫거나 네트워크 연결을 종료할 때 매우 유용합니다.


6. 예외를 직접 발생시키는 방법 (raise)

개발자가 특정 조건을 만족하지 않을 때 직접 예외를 발생시킬 수도 있습니다.
이때는 raise 키워드를 사용합니다.

def set_age(age):
    if age < 0:
        raise ValueError("나이는 음수가 될 수 없습니다.")
    print(f"나이: {age}")

set_age(25)  # 정상 동작
set_age(-5)  # 예외 발생

이렇게 직접 예외를 발생시키면 프로그램이 올바른 데이터만 처리하도록 만들 수 있습니다.


결론

예외 처리는 안정적이고 신뢰할 수 있는 프로그램을 만드는 데 필수적인 요소입니다.
파이썬의 try-except 구문을 활용하면 다양한 에러 상황에 유연하게 대처할 수 있습니다.