[파이썬] 예외 처리와 회복 기능 구현

python_exception_handling

안녕하세요! 이번 블로그에서는 파이썬에서 예외 처리와 회복 기능을 구현하는 방법에 대해 알아보겠습니다. 예외 처리는 코드 실행 중 발생할 수 있는 예기치 않은 상황을 처리하는 방법입니다. 이는 런타임 오류를 방지하고 안정성을 개선하는 데에 매우 중요합니다.

1. try-except 문

가장 기본적인 예외 처리 방법은 try-except 문입니다. try 블록에는 예외가 발생할 수 있는 코드를 작성하고, except 블록에는 해당 예외를 처리하는 코드를 작성합니다.

try:
    # 예외가 발생할 수 있는 코드
except 예외종류:
    # 예외 처리 코드

예를 들어, 사용자로부터 두 개의 숫자를 입력받아 나누는 프로그램이 있다고 해봅시다. 하지만 사용자가 0으로 나누기를 시도하면 ZeroDivisionError 예외가 발생합니다. 이를 try-except 문으로 처리해봅시다.

try:
    dividend = int(input("나뉨을 입력하세요: "))
    divisor = int(input("나누는 수를 입력하세요: "))
    result = dividend / divisor
    print("나눗셈 결과:", result)
except ZeroDivisionError:
    print("0으로 나눌 수 없습니다.")

여기서 try 블록 안에서 input 함수를 사용하는 코드를 실행할 때, 사용자가 잘못된 값을 입력하면 ValueError 예외가 발생합니다. 따라서 ValueError 예외도 함께 처리해주는 것이 좋습니다.

try:
    dividend = int(input("나뉨을 입력하세요: "))
    divisor = int(input("나누는 수를 입력하세요: "))
    result = dividend / divisor
    print("나눗셈 결과:", result)
except ZeroDivisionError:
    print("0으로 나눌 수 없습니다.")
except ValueError:
    print("잘못된 값을 입력하였습니다.")

2. finally 문

finally 문은 예외의 발생 여부와 관계없이 항상 실행되어야 하는 코드 블록입니다. 주로 파일이나 네트워크 연결 등을 종료할 때 사용됩니다.

try:
    # 예외가 발생할 수 있는 코드
except 예외종류:
    # 예외 처리 코드
finally:
    # 예외 여부와 관계없이 항상 실행되어야 하는 코드

예를 들어, 파일을 열고 읽는 동작을 수행하고, 예외가 발생하든 말든 파일을 닫아주는 코드를 작성해봅시다.

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

3. raise 문

raise 문은 개발자가 직접 예외를 발생시킬 수 있는 기능입니다. 이를 통해 특정 조건에 따라 예외를 발생시키고, 그에 따른 예외 처리를 수행할 수 있습니다.

if 조건:
    raise 예외종류("예외 메시지")

예를 들어, 사용자가 입력한 값이 양수인지 확인하고, 양수가 아니라면 ValueError 예외를 발생시키도록 하겠습니다.

value = int(input("양수를 입력하세요: "))
if value <= 0:
    raise ValueError("양수가 아닙니다.")

위 코드에서 value 값이 0이거나 음수인 경우, ValueError: 양수가 아닙니다. 예외가 발생합니다.

4. try-except-else 문

try-except-else 문은 try 블록에서 예외가 발생하지 않은 경우에만 실행되는 코드 블록입니다. 이를 통해 예외 발생 여부와 상관없이 특정 동작을 수행할 수 있습니다.

try:
    # 예외가 발생할 수 있는 코드
except 예외종류:
    # 예외 처리 코드
else:
    # 예외가 발생하지 않은 경우 수행되는 코드

예를 들어, 숫자로 이루어진 문자열을 정수형으로 변환하고, 변환된 숫자들의 합을 출력하는 코드를 작성해봅시다.

numbers = input("숫자들을 입력하세요 (공백으로 구분): ")
number_list = numbers.split()  # 입력된 문자열을 공백으로 분리하여 리스트로 변환

try:
    sum_of_numbers = sum([int(number) for number in number_list])
except ValueError:
    print("입력된 값 중 숫자가 아닌 값이 포함되어 있습니다.")
else:
    print("숫자들의 합:", sum_of_numbers)

마치며

이번 블로그에서는 파이썬에서 예외 처리와 회복 기능을 구현하는 방법에 대해 알아보았습니다. try-except 문을 사용하여 예외를 처리하고, finally 문을 사용하여 항상 실행되어야 하는 코드를 작성하는 방법을 배웠습니다. 또한 raise 문과 try-except-else 문을 사용하여 예외를 직접 발생시키고 처리하는 방법에 대해서도 알아보았습니다. 예외 처리는 코드의 안정성과 신뢰성을 높이는 중요한 요소이므로, 항상 염두에 두시길 바랍니다. 감사합니다!