Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬 try-except 예외 처리 완벽 가이드

파이썬 예외 처리란?

파이썬에서 예외 처리(Exception Handling)를 활용하면 프로그램 실행 중 발생할 수 있는 오류를 효과적으로 관리할 수 있습니다. 파일을 열 수 없거나, 존재하지 않는 변수에 접근하는 등 다양한 오류가 발생했을 때 이를 적절히 처리하지 않으면 프로그램이 강제로 종료되기 때문입니다.

파이썬은 예외를 잡기 위해 tryexcept라는 두 가지 키워드를 제공합니다. try 블록 안의 코드는 한 문장씩 순서대로 실행되지만, 실행 중 예외가 발생하면 남은 try 블록의 코드는 더 이상 실행되지 않고 즉시 except 절로 제어가 넘어갑니다.

기본 문법

try:
    some_statements_here
except:
    exception_handling

간단한 예제

위 문법을 아주 간단한 예제로 확인해 보겠습니다.

try:
    print("Hello, World!")
except:
    print("This is an error message!")

실행 결과

Hello, World!

try 블록에서 예외가 발생하지 않았기 때문에 정상적인 출력만 나타나고, except 블록은 실행되지 않은 것을 확인할 수 있습니다.

실전 예제

개념을 더 확실하게 이해하기 위해 조금 더 실질적인 예제를 살펴보겠습니다.

import sys
List = ['abc', 0, 2, 4]
for item in List:
    try:
        print("The List Item is", item)
        r = 1/int(item)
        break
    except:
    print("Oops!", sys.exc_info()[0], "occured.")
    print('\n')
    print("Next Item from the List is: ")
    print()
print("The reciprocal of", item, "is", r)

실행 결과

The List Item is abc
Oops! <class 'ValueError'> occured.
Next Item from the List is:
The List Item is 0
Oops! <class 'ZeroDivisionError'> occured.
Next Item from the List is:
The List Item is 2
The reciprocal of 2 is 0.5

위 프로그램은 리스트의 각 요소에 대해 역수(reciprocal)를 계산합니다. 문자열 'abc'는 정수로 변환할 수 없어 ValueError가 발생하고, 0으로 나눌 때는 ZeroDivisionError가 발생합니다. 예외를 일으킬 가능성이 있는 코드는 try 블록 안에 배치되며, 예외가 발생하면 except 블록이 이를 잡아 처리합니다. 그 결과 유효한 역수를 가진 첫 번째 정수인 2에서 반복문이 정상적으로 종료됩니다.

자주 발생하는 주요 예외 유형

다양한 예외 오류로 위 프로그램을 테스트해 볼 수 있으며, 실무에서 자주 마주치는 대표적인 예외들은 다음과 같습니다.

  • IOError

    파일을 열 수 없는 경우 발생합니다.

  • ImportError

    필요한 모듈이 없거나 찾을 수 없을 때 발생합니다.

  • ValueError

    내장 연산자나 함수에 올바른 타입의 인수를 전달했지만 값이 부적절한 경우 발생합니다.

  • KeyboardInterrupt

    사용자가 인터럽트 키(일반적으로 Ctrl+C)를 눌렀을 때 발생합니다.

  • EOFError

    내장 함수(input() 등)가 데이터를 읽지 못한 상태에서 파일 끝(EOF) 조건에 도달했을 때 발생합니다.

마무리

try-except 구문은 파이썬에서 프로그램의 안정성을 높이는 핵심 도구입니다. 예상치 못한 오류가 발생해도 프로그램이 중단되지 않고 적절하게 대응할 수 있도록, 예외가 발생할 가능성이 있는 코드에는 항상 예외 처리를 적용하는 습관을 들이는 것이 좋습니다.