Python 기초

Python 예외 처리 가이드

PyExplorer 2024. 12. 2. 13:03
728x90

Python 예외 처리 가이드

안녕하세요, Deep Python Studio입니다! 오늘은 Python에서 자주 사용되는 예외 처리 방법에 대해 다뤄보겠습니다. 소프트웨어 개발을 하다 보면 다양한 이유로 프로그램이 비정상적으로 종료될 때가 많습니다. 이러한 상황을 방지하고 더 나은 사용자 경험을 제공하기 위해 Python에서는 예외 처리를 할 수 있습니다. 이번 포스팅에서는 try, except 문을 활용한 예외 처리 방법과 다양한 예외 처리 사례를 예제를 통해 설명드리겠습니다.

예외 처리란 무엇인가요?

예외 처리는 프로그램 실행 중에 발생할 수 있는 오류 상황에 대처하는 방법입니다. 예외 처리를 사용하지 않으면 프로그램은 오류가 발생하는 즉시 중단되고, 사용자에게도 친절하지 않은 오류 메시지를 출력하게 됩니다. 반면에 예외 처리를 사용하면 예상 가능한 오류를 미리 처리하고, 프로그램의 비정상 종료를 방지하며 오류를 우아하게 처리할 수 있습니다.

Python에서는 try, except 구문을 사용하여 예외를 처리할 수 있습니다. 기본적인 형태는 다음과 같습니다.

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

위와 같이 try 블록 내에서 예외가 발생하면, except 블록이 실행됩니다. 예외가 발생하지 않는다면 except 블록은 무시되고 프로그램이 계속해서 실행됩니다.

기본적인 예외 처리 예제

가장 흔히 발생하는 예외 중 하나는 ZeroDivisionError입니다. 숫자를 0으로 나누는 경우에 발생하는 오류인데요, 이를 예외 처리로 방지하는 간단한 예제를 살펴보겠습니다.

try:
    result = 10 / 0
except ZeroDivisionError:
    print("0으로 나눌 수 없습니다.")

위 코드에서는 10 / 0 연산이 실행될 때 ZeroDivisionError가 발생합니다. 이 경우 except ZeroDivisionError: 블록이 실행되어 "0으로 나눌 수 없습니다."라는 메시지를 출력하게 됩니다.

다양한 예외 처리 사례

예외 처리에서는 특정 오류뿐만 아니라 모든 오류를 포괄적으로 처리할 수도 있습니다. 이러한 경우 except 구문에 예외 유형을 명시하지 않고 모든 예외를 처리할 수 있습니다.

try:
    value = int(input("숫자를 입력하세요: "))
    print("입력한 값:", value)
except:
    print("올바른 숫자를 입력해주세요.")

위 코드에서는 사용자가 숫자가 아닌 값을 입력했을 때 발생하는 예외를 처리합니다. int() 함수는 숫자가 아닌 문자열을 변환하려고 하면 ValueError를 발생시키는데, 이 경우 except 블록에서 "올바른 숫자를 입력해주세요."라는 메시지를 출력합니다.

여러 개의 예외 처리하기

하나의 try 블록에서 여러 가지 예외가 발생할 수 있다면, 각 예외를 별도로 처리할 수 있습니다. 예를 들어, 파일을 읽는 도중 파일이 존재하지 않거나, 허가되지 않은 작업이 발생할 수 있습니다.

try:
    with open("nonexistent_file.txt", "r") as file:
        content = file.read()
except FileNotFoundError:
    print("파일을 찾을 수 없습니다.")
except PermissionError:
    print("파일을 읽을 권한이 없습니다.")

위 코드에서는 FileNotFoundErrorPermissionError를 개별적으로 처리하고 있습니다. 이렇게 하면 각 오류에 대해 명확한 대응을 할 수 있어, 오류 상황을 정확히 파악하고 처리할 수 있습니다.

예외 객체 사용하기

예외가 발생하면, 예외 객체를 통해 추가적인 정보를 얻을 수 있습니다. 이를 위해 as 키워드를 사용하여 예외 객체를 참조할 수 있습니다.

try:
    number = int("Python")
except ValueError as e:
    print(f"예외가 발생했습니다: {e}")

위 코드에서 문자열 "Python"을 정수로 변환하려고 시도하면 ValueError가 발생합니다. 이때 as e를 사용하여 예외 객체를 변수 e에 할당하고, 예외에 대한 상세 정보를 출력할 수 있습니다.

finally 블록

try 블록에서 예외가 발생하든 발생하지 않든 상관없이 반드시 실행되어야 하는 코드가 있다면 finally 블록을 사용할 수 있습니다. 예를 들어 파일을 열고 나서 꼭 닫아야 할 때 유용합니다.

try:
    file = open("example.txt", "r")
    content = file.read()
except FileNotFoundError:
    print("파일을 찾을 수 없습니다.")
finally:
    file.close()
    print("파일을 닫았습니다.")

위 코드에서는 파일이 존재하지 않더라도 finally 블록이 실행되어 파일을 닫는 작업이 이루어집니다. finally는 리소스를 정리하거나 프로그램의 종료 전에 반드시 수행해야 할 작업이 있을 때 유용하게 사용할 수 있습니다.

else 블록

try 블록에서 예외가 발생하지 않았을 때만 실행되는 else 블록도 있습니다. 예외가 발생하지 않았을 때의 추가적인 처리를 정의할 수 있습니다.

try:
    value = int(input("숫자를 입력하세요: "))
except ValueError:
    print("올바른 숫자를 입력해주세요.")
else:
    print(f"입력한 숫자는 {value}입니다.")

위 코드에서 사용자가 올바른 숫자를 입력하면 else 블록이 실행되어 입력한 값을 출력합니다. 예외가 발생하지 않은 경우에만 추가 작업을 하고 싶을 때 유용합니다.

사용자 정의 예외

Python에서는 사용자가 직접 예외를 정의하고 발생시킬 수도 있습니다. 사용자 정의 예외를 사용하면 특정 조건에 맞는 예외를 명확하게 처리할 수 있습니다.

class CustomError(Exception):
    pass

def check_positive_number(value):
    if value < 0:
        raise CustomError("양수만 입력 가능합니다.")

try:
    number = int(input("양수를 입력하세요: "))
    check_positive_number(number)
except CustomError as e:
    print(e)

위 코드에서는 CustomError라는 사용자 정의 예외를 만들어, 음수를 입력할 경우 직접 예외를 발생시킵니다. 이를 통해 프로그램의 논리를 더 명확하게 하고, 특정한 상황에 대해 더 나은 예외 처리를 할 수 있습니다.

마무리

이번 포스팅에서는 Python의 예외 처리 방법에 대해 알아보았습니다. 예외 처리는 프로그램의 안정성을 높이고, 사용자에게 보다 나은 경험을 제공하기 위해 필수적으로 사용됩니다. try, except, else, finally 블록을 적절히 활용하면 다양한 예외 상황에 대응할 수 있으며, 사용자 정의 예외를 통해 상황에 맞는 예외를 보다 명확하게 처리할 수 있습니다.

728x90