Python 예외 처리 방법 및 코드 예제
파이썬 프로그래밍에서 예외 처리는 필수적인 요소로, 프로그램이 실행되던 중 예상치 못한 오류가 발생하여 비정상적으로 종료되는 것을 방지하는 방법입니다. 다양한 오류 상황에 대비하여 적절히 처리할 수 있는 방법을 알아보겠습니다.

예외란 무엇인가?
예외(Exception)는 프로그램 실행 중 발생할 수 있는 오류를 의미합니다. 이러한 오류는 다양한 원인으로 발생하며, 그에 따라 프로그램의 흐름을 제어하는 데 중요합니다. 예를 들면, 0으로 나누기, 리스트의 범위를 초과한 인덱스 접근, 존재하지 않는 변수를 참조하는 상황 등이 있습니다.
예외 처리의 중요성
예외 처리를 사용하는 이유는 다음과 같습니다:
- 오류 복구: 프로그램이 예외 상황 발생 시 대체 동작을 설정하여 지속적으로 실행되도록 할 수 있습니다.
- 오류 정보 제공: 발생한 오류에 대한 정보를 통해 디버깅을 보다 용이하게 수행할 수 있습니다.
- 프로그램의 안정성 향상: 예외 처리를 통해 비정상적인 종료를 방지하며, 프로그램의 신뢰성을 높일 수 있습니다.
파이썬의 예외 처리 기법
파이썬에서는 ‘try’와 ‘except’ 블록을 사용하여 예외를 처리합니다. ‘try’ 블록에는 오류가 발생할 수 있는 코드를 작성하고, ‘except’ 블록에는 오류 발생 시 실행할 코드를 명시합니다.
기본 예외 처리 예제
아래의 코드는 사용자가 입력한 숫자로 나누기를 시도하는 간단한 예제입니다. 이 과정에서 예외가 발생하면 적절한 메시지를 출력합니다.
try:
num = int(input("숫자를 입력하세요: "))
result = 10 / num
print("결과:", result)
except ZeroDivisionError:
print("0으로 나눌 수 없습니다.")
except ValueError:
print("올바른 숫자를 입력해주세요.")
except Exception as e:
print(f"예외 발생: {e}")
위의 예제에서 사용자는 숫자를 입력하고, 그에 따라 10을 나누는 계산을 수행합니다. 만약 사용자가 0이나 숫자가 아닌 값을 입력할 경우, 예외가 발생하여 해당 오류를 처리합니다.
다양한 예외 처리 방법
파이썬에서는 다양한 내장 예외가 존재하며, 이를 통해 여러 오류를 처리할 수 있습니다. 여러 개의 except 블록을 사용하여 특정 예외를 구분해 처리할 수 있습니다.

여러 개의 예외 처리
다음과 같이 여러 개의 except 블록을 사용하여 다양한 예외를 처리하는 방법을 살펴보겠습니다.
try:
value = my_dict["key"]
except KeyError:
print("키가 없습니다.")
except IndexError:
print("인덱스 오류가 발생했습니다.")
위의 코드에서는 딕셔너리에서 키를 조회할 때 키가 존재하지 않을 경우와 인덱스를 사용할 때 오류가 발생할 경우에 대비하여 각각 처리합니다.
예외가 발생하지 않을 경우
예외가 발생하지 않을 경우 실행할 작업을 설정하려면 else
블록을 사용할 수 있습니다. 아래의 예제에서 try 블록이 성공적으로 실행되면 else 블록이 실행됩니다.
try:
num = int(input("숫자를 입력하세요: "))
result = 10 / num
except ZeroDivisionError:
print("0으로 나눌 수 없습니다.")
except ValueError:
print("올바른 숫자를 입력해주세요.")
else:
print("결과:", result)
항상 실행되는 코드
finally 블록을 사용하면 예외 발생 여부와 상관없이 항상 실행되는 코드를 설정할 수 있습니다. 이는 리소스를 해제하거나 로그를 남길 때 유용하게 사용됩니다.
try:
num = int(input("숫자를 입력하세요: "))
result = 10 / num
except ZeroDivisionError:
print("0으로 나눌 수 없습니다.")
finally:
print("이 문장은 항상 실행됩니다.")
사용자 정의 예외 만들기
파이썬에서는 사용자가 필요에 따라 직접 예외 클래스를 만들어 사용할 수 있습니다. 사용자 지정 예외는 특정 상황에 맞춘 오류 처리를 가능하게 합니다.
class MyException(Exception):
def __init__(self, message):
self.message = message
def __str__(self):
return self.message
try:
raise MyException("사용자 정의 예외 발생")
except MyException as e:
print(f"에러 발생: {e}")
예외 발생시키기
raise 문을 사용해 특정 상황에서 강제로 예외를 발생시킬 수 있습니다. 이는 프로그래머가 특정 조건을 충족하지 않을 경우 예외를 발생시켜 문제를 강조할 때 유용합니다.
def check_positive(num):
if num < 0:
raise ValueError("음수는 입력할 수 없습니다.")
return num
try:
value = check_positive(-5)
except ValueError as e:
print(e)
반복하여 예외 처리하기
사용자가 올바른 값을 입력할 때까지 반복하여 입력을 받을 수 있는 구조를 만들 수 있습니다. 이는 사용자 입력을 처리할 때 유용합니다.
while True:
try:
num = int(input("양수를 입력하세요: "))
result = 10 / num
print("결과:", result)
break
except ZeroDivisionError:
print("0으로 나눌 수 없습니다.")
except ValueError:
print("올바른 숫자를 입력해주세요.")

결론
파이썬의 예외 처리는 프로그램의 안정성을 높이는데 중요한 역할을 합니다. 다양한 예외를 이해하고 적절히 처리함으로써, 코드를 보다 안전하게 유지할 수 있습니다. 프로그램이 예상치 못한 오류로 인해 중단되는 것을 방지하고, 오류 정보에 기반하여 개발을 효율적으로 진행할 수 있도록 돕는 것이 바로 예외 처리입니다.
자주 찾는 질문 Q&A
파이썬에서 예외 처리는 왜 중요한가요?
예외 처리는 프로그램이 예기치 않은 오류로 인해 중단되는 것을 예방해주며, 안정성과 신뢰성을 높이는 데 매우 중요합니다. 이를 통해 오류를 관리하고 프로그램의 흐름을 유지할 수 있습니다.
어떻게 파이썬에서 예외를 처리하나요?
파이썬에서는 'try' 블록과 'except' 블록을 사용하여 예외를 처리합니다. 'try' 블록 안에 오류가 발생할 수 있는 코드를 작성하고, 오류가 발생했을 때 대처할 코드는 'except' 블록에 표기합니다.
사용자 정의 예외는 어떻게 만들 수 있나요?
사용자 정의 예외는 특정 요구에 맞춰 클래스 형태로 생성할 수 있습니다. 클래스를 정의하고 Exception을 상속받아 필요한 속성을 추가함으로써 고유한 예외를 만들 수 있습니다.