try와 except 구문은 파이썬의 예외 처리 메커니즘입니다. 예외 처리란 프로그램 실행 중에 발생할 수 있는 오류를 예측하고 이에 대한 대응을 정의하는 것을 말합니다. 파이썬에서는 특정 코드 블록을 try 구문으로 감싸고, 해당 블록에서 예외가 발생하면 except 구문으로 이를 처리할 수 있습니다.
기본 구조
try:
# 예외가 발생할 수 있는 코드
except 예외타입:
# 예외 발생 시 처리할 코드
도입 배경
try와 except 구문은 파이썬 1.0부터 도입되었습니다. 이는 1994년에 처음 릴리스되었습니다. 도입된 이유는 예외 처리 메커니즘을 통해 프로그램의 안정성을 높이고, 예외 상황에서 적절한 처리를 할 수 있도록 하기 위해서입니다.
장점
1. 프로그램의 안정성 향상: 예외가 발생하더라도 프로그램이 중단되지 않고 정상적으로 실행을 계속할 수 있습니다.
2. 오류 처리의 중앙화: 특정 코드 블록에 대한 예외 처리를 중앙에서 관리할 수 있어 코드의 가독성과 유지보수성이 향상됩니다.
3. 특정 오류에 대한 대응: 각기 다른 예외 상황에 대해 다르게 대응할 수 있습니다.
try:
# 예외가 발생할 수 있는 코드
except 예외타입:
# 예외 발생 시 처리할 코드
else:
# 예외가 발생하지 않았을 때 실행할 코드
try:
# 예외가 발생할 수 있는 코드
except 예외타입:
# 예외 발생 시 처리할 코드
finally:
# 예외 발생 여부와 상관없이 항상 실행할 코드
활용 예시
1. 파일 열기와 닫기
try:
file = open("example.txt", "r")
content = file.read()
except FileNotFoundError:
print("파일을 찾을 수 없습니다.")
finally:
file.close()
2. 데이터베이스 연결
import sqlite3
try:
conn = sqlite3.connect("example.db")
cursor = conn.cursor()
cursor.execute("SELECT * FROM users")
results = cursor.fetchall()
except sqlite3.DatabaseError as e:
print(f"데이터베이스 오류가 발생했습니다: {e}")
finally:
conn.close()
3. 사용자 입력 처리
my_list = [1, 2, 3, 4, 5]
try:
index = int(input("접근할 리스트 인덱스를 입력하세요: "))
print(f"리스트의 {index}번째 요소는 {my_list[index]}입니다.")
except IndexError:
print("유효한 인덱스를 입력하세요.")
except ValueError:
print("숫자를 입력하세요.")
4. 사전에서 키 찾기
my_dict = {"name": "Alice", "age": 30}
try:
key = input("찾고자 하는 키를 입력하세요: ")
value = my_dict[key]
print(f"키 '{key}'의 값은 {value}입니다.")
except KeyError:
print("해당 키가 사전에 존재하지 않습니다.")
5. 사용자 정의 예외처리
class NegativeNumberError(Exception):
pass
def check_positive(number):
if number < 0:
raise NegativeNumberError("음수는 허용되지 않습니다.")
try:
num = int(input("양수를 입력하세요: "))
check_positive(num)
print(f"입력한 숫자는 {num}입니다.")
except NegativeNumberError as e:
print(e)
except ValueError:
print("유효한 숫자를 입력하세요.")
try와 except 구문은 예외 발생 시 프로그램의 정상적인 흐름을 유지하고, 예외에 대한 적절한 처리를 통해 코드의 신뢰성을 높이는 데 중요한 역할을 합니다. 이를 통해 예외 상황에 대한 처리 로직을 명확하게 하고, 리소스를 효율적으로 관리할 수 있습니다.
'Python' 카테고리의 다른 글
pass 명령문 (0) | 2024.05.26 |
---|---|
반환값과 메모리 사용 효율성 (0) | 2024.05.24 |
메서드(method), 객체(object)란? 메서드와 함수의 차이점은? (0) | 2024.05.24 |