파이썬 기본 문법: 예외 처리
try-except 구문, 예외 종류, 사용자 정의 예외 등
코드를 실행하는 동안 예상치 못한 오류가 발생할 수 있습니다. 파이썬의 예외 처리(Exception Handling)는 이러한 오류를 감지하고 적절히 대응할 수 있도록 도와줍니다. 이번 글에서는 try-except 구문, 예외 종류, 사용자 정의 예외 등을 살펴보겠습니다.
1. 예외란?
- 예외(Exception): 프로그램 실행 중 발생하는 오류를 의미합니다.
- 예외가 처리되지 않으면 프로그램이 강제로 종료됩니다.
- 파이썬에서는 예외를 처리하여 프로그램의 안정성을 높일 수 있습니다.
2. try-except 구문
기본 구조
1
2
3
4
try:
# 실행할 코드
except 예외타입:
# 예외 발생 시 실행할 코드
예제
1
2
3
4
5
try:
x = int(input("숫자를 입력하세요: "))
print(f"입력한 숫자: {x}")
except ValueError:
print("유효한 숫자가 아닙니다.")
3. 다양한 예외 처리
1) 여러 예외 처리
여러 종류의 예외를 처리할 때는 각각의 except
블록을 사용할 수 있습니다.
1
2
3
4
5
6
7
try:
num = int(input("숫자를 입력하세요: "))
result = 10 / num
except ValueError:
print("숫자가 아닙니다.")
except ZeroDivisionError:
print("0으로 나눌 수 없습니다.")
2) 모든 예외 처리
모든 종류의 예외를 처리하려면 except Exception
을 사용합니다.
1
2
3
4
try:
x = 10 / 0
except Exception as e:
print(f"오류 발생: {e}")
3) else와 finally
- else: 예외가 발생하지 않았을 때 실행.
- finally: 예외 발생 여부와 관계없이 항상 실행.
1
2
3
4
5
6
7
8
try:
x = int(input("숫자를 입력하세요: "))
except ValueError:
print("유효한 숫자가 아닙니다.")
else:
print(f"입력한 숫자: {x}")
finally:
print("프로그램 종료.")
4. 예외의 종류
파이썬에서 자주 발생하는 예외 종류는 다음과 같습니다.
예외 종류 | 설명 |
---|---|
ValueError | 잘못된 값 사용 |
TypeError | 잘못된 데이터 타입 사용 |
IndexError | 시퀀스의 유효하지 않은 인덱스 접근 |
KeyError | 딕셔너리에 없는 키 접근 |
ZeroDivisionError | 0으로 나누기 시도 |
FileNotFoundError | 존재하지 않는 파일 접근 |
예제
1
2
3
4
5
try:
my_list = [1, 2, 3]
print(my_list[5])
except IndexError:
print("인덱스가 유효하지 않습니다.")
5. 사용자 정의 예외
파이썬에서는 기본 제공되는 예외 외에도 사용자 정의 예외를 만들 수 있습니다.
예제: 사용자 정의 예외
1
2
3
4
5
6
7
8
9
10
class NegativeNumberError(Exception):
"""음수를 입력했을 때 발생하는 예외"""
pass
try:
x = int(input("양수를 입력하세요: "))
if x < 0:
raise NegativeNumberError("음수는 허용되지 않습니다.")
except NegativeNumberError as e:
print(e)
6. 예외 처리 활용 사례
1) 파일 처리에서의 예외 처리
1
2
3
4
5
6
try:
with open("data.txt", "r") as file:
content = file.read()
print(content)
except FileNotFoundError:
print("파일을 찾을 수 없습니다.")
2) 숫자 입력 검증
1
2
3
4
5
6
while True:
try:
x = int(input("숫자를 입력하세요: "))
break
except ValueError:
print("유효한 숫자를 입력하세요.")
3) API 호출에서의 예외 처리
1
2
3
4
5
6
7
8
import requests
try:
response = requests.get("https://jsonplaceholder.typicode.com/posts/1")
response.raise_for_status()
print(response.json())
except requests.exceptions.RequestException as e:
print(f"API 호출 오류: {e}")
정리
- try-except: 예외를 감지하고 적절히 처리하여 프로그램의 안정성을 높입니다.
- else와 finally: 예외가 없는 경우 실행되는 코드와 항상 실행되는 코드를 작성할 수 있습니다.
- 사용자 정의 예외: 필요에 따라 사용자만의 예외를 정의하여 로직을 명확히 할 수 있습니다.
다음 글 예고:
파이썬의 심화 주제로, “데코레이터와 제너레이터”를 배우며, 고급 기능으로 효율적인 코드를 작성하는 방법을 알아보겠습니다!
This post is licensed under CC BY 4.0 by the author.