예외처리는 이러한 오류가 발생했을 때 프로그램이 비정상적으로 종료되지 않고 적절히 대응할 수 있게 한다.
try:
# 예외가 발생할 수 있는 코드
pass
except 예외타입:
# 예외 발생 시 실행할 코드
pass
try:
number = int("abc") # 문자열을 정수로 변환 불가
except ValueError:
print("숫자가 아닌 값을 입력했습니다.")
# 실제 사용 예제
def get_age():
try:
age = int(input("나이를 입력하세요: "))
return age
except ValueError:
print("올바른 숫자를 입력해주세요.")
return None
try:
result = 10 / 0
except ZeroDivisionError:
print("0으로 나눌 수 없습니다.")
# 실용적인 예제
def divide_numbers(a, b):
try:
return a / b
except ZeroDivisionError:
print("분모가 0이 될 수 없습니다.")
return None
my_list = [1, 2, 3]
try:
print(my_list[5]) # 존재하지 않는 인덱스
except IndexError:
print("리스트의 범위를 벗어났습니다.")
# 안전한 리스트 접근 함수
def safe_get_item(lst, index):
try:
return lst[index]
except IndexError:
print(f"인덱스 {index}는 범위를 벗어났습니다.")
return None
my_dict = {"name": "김철수", "age": 25}
try:
print(my_dict["address"]) # 존재하지 않는 키
except KeyError:
print("존재하지 않는 키입니다.")
# 안전한 딕셔너리 접근
def get_user_info(user_dict, key):
try:
return user_dict[key]
except KeyError:
print(f"'{key}' 정보가 없습니다.")
return "정보 없음"
try:
with open("없는파일.txt", "r") as file:
content = file.read()
except FileNotFoundError:
print("파일을 찾을 수 없습니다.")
# 파일 읽기 함수
def read_file(filename):
try:
with open(filename, "r", encoding="utf-8") as file:
return file.read()
except FileNotFoundError:
print(f"'{filename}' 파일이 존재하지 않습니다.")
return None
모든 예외를 잡고 싶을때
try: # 뭔 일이 일어날지 모르겠는 코드
user_input = input("숫자 입력: ")
number = int(user_input)
result = 100 / number
my_list = [1, 2, 3]
print(my_list[number])
except Exception as e: # 어떤 에러든 다 잡아버림
print(f"뭔가 잘못됐어요: {e}")
print(f"에러 타입: {type(e).__name__}") # 여기서 __name__은 에러의 정확한 이름을 알려줌