
안녕하세요! 파이썬에서 **예외 처리(Exception Handling)**에 대해 쉽고 간단하게 설명해 드리고, 아주 간단한 예제도 보여드릴게요.
예외(Exception)가 뭔가요?
프로그램을 만들다 보면 예상치 못한 문제들이 생길 수 있어요. 예를 들어,
- 숫자를 0으로 나누려고 할 때 (ZeroDivisionError)
- 파일을 열려고 하는데 그 파일이 없을 때 (FileNotFoundError)
- 숫자를 입력해야 하는 곳에 글자를 입력했을 때 (ValueError)
이런 식으로 프로그램 실행 중에 발생하는 오류나 문제 상황을 "예외"라고 불러요. 이런 예외가 발생하면 프로그램은 보통 그 자리에서 멈춰버린답니다. 😱
예외 처리는 왜 필요한가요?
- 프로그램 비정상 종료 방지: 예외가 발생해도 프로그램이 바로 꺼지지 않고, 문제를 부드럽게 처리해서 계속 실행되거나 안전하게 종료될 수 있게 해요.
- 사용자 경험 향상: 사용자에게 "알 수 없는 오류로 프로그램이 종료됩니다." 대신 "숫자를 입력해야 합니다."처럼 친절한 안내를 해줄 수 있어요.
- 코드 안정성 및 신뢰도 증가: 예외 상황을 미리 대비함으로써 프로그램이 더 튼튼해지고 믿을 수 있게 됩니다.
파이썬 예외 처리 기본 구조: try, except, else, finally
파이썬에서는 try와 except라는 특별한 명령어를 사용해서 예외를 처리해요.
- try 블록:
- 예외가 발생할 가능성이 있는 코드를 이 안에 넣어요.
- 파이썬은 try 블록 안의 코드를 실행하다가 예외가 발생하면 즉시 실행을 멈추고 except 블록으로 점프해요.
- except 블록:
- try 블록에서 특정 예외가 발생했을 때 실행될 코드를 이 안에 넣어요.
- 어떤 종류의 예외를 처리할지 지정할 수 있어요 (예: except ValueError:).
- 여러 종류의 예외를 처리하기 위해 여러 개의 except 블록을 사용할 수도 있어요.
- 만약 모든 종류의 예외를 다 잡고 싶다면 except Exception: (또는 그냥 except:)을 쓸 수도 있지만, 보통은 어떤 예외가 발생했는지 명확히 아는 것이 좋아서 특정 예외를 지정하는 것을 권장해요.
- else 블록 (선택 사항):
- try 블록 안의 코드가 아무런 예외 없이 성공적으로 실행되었을 때만 실행될 코드를 이 안에 넣어요.
- finally 블록 (선택 사항):
- 예외 발생 여부와 상관없이, try 블록 실행이 끝나면 항상 실행될 코드를 이 안에 넣어요.
- 주로 파일을 닫거나, 네트워크 연결을 해제하는 등 마무리 작업을 할 때 사용해요.
아주 간단한 예제: 사용자 입력 처리
사용자에게 나이를 숫자로 입력받는 간단한 프로그램을 만들어 볼게요. 만약 사용자가 숫자가 아닌 다른 것을 입력하면 ValueError라는 예외가 발생할 수 있어요. 이걸 처리해 봅시다.
Python
print("🎉 안녕하세요! 나이 계산 프로그램입니다. 🎉")
try:
# 1. 예외가 발생할 가능성이 있는 코드
user_input = input("당신의 나이를 숫자로 입력해주세요: ")
age = int(user_input) # 여기서 문자를 입력하면 ValueError 발생!
# 2. try 블록의 코드가 성공적으로 실행되면 이 부분이 실행됩니다.
if age < 0:
print("🤔 나이는 0보다 작을 수 없어요. 다시 시도해주세요.")
elif age > 130:
print("😲 정말인가요? 굉장히 오래 사셨네요! 혹시 숫자를 잘못 입력하셨나요?")
else:
print(f"😊 입력하신 나이는 {age}살이시군요!")
print(f"🥳 10년 후에는 {age + 10}살이 되시겠네요!")
except ValueError:
# 3. int() 함수가 user_input을 숫자로 바꾸지 못할 때 ValueError가 발생하면 이 블록이 실행됩니다.
print(f"💥 이런! '{user_input}'은(는) 숫자가 아니에요. 숫자로 정확히 입력해주세요.")
else:
# 4. try 블록에서 아무런 예외도 발생하지 않았을 때 실행됩니다.
print("👍 나이가 성공적으로 입력되었습니다.")
finally:
# 5. 예외 발생 여부와 관계없이 항상 마지막에 실행됩니다.
print("\n나이 계산 프로그램을 이용해주셔서 감사합니다! 👋")
코드 설명:
- try::
- user_input = input(...): 사용자에게 입력을 받습니다.
- age = int(user_input): 입력받은 문자열을 정수(숫자)로 변환하려고 시도합니다. 만약 사용자가 "안녕"이나 "10살"처럼 숫자 형태가 아닌 값을 입력하면, 이 줄에서 ValueError 예외가 발생합니다.
- except ValueError::
- 만약 try 블록 안에서 ValueError가 발생하면, 프로그램은 즉시 이 except ValueError: 블록으로 이동합니다.
- print(f"💥 이런! '{user_input}'은(는) 숫자가 아니에요. ...") : 사용자에게 숫자를 잘못 입력했다고 친절하게 알려줍니다. 이 코드가 실행되면 프로그램이 꺼지지 않고 계속 진행됩니다 (여기서는 finally 블록으로).
- else::
- 만약 try 블록에서 age = int(user_input) 코드가 아무 문제 없이 (즉, 사용자가 숫자를 잘 입력해서) 성공적으로 실행되면, 이 else: 블록 안의 코드가 실행됩니다.
- print("👍 나이가 성공적으로 입력되었습니다.") 메시지가 출력됩니다.
- finally::
- try 블록에서 예외가 발생하든 안 하든, 심지어 except나 else 블록이 실행된 후에도 무조건 마지막으로 실행됩니다.
- print("\n나이 계산 프로그램을 이용해주셔서 감사합니다! 👋") : 프로그램 종료 전에 항상 감사 인사를 합니다.
실행 결과 예시:
- 숫자를 제대로 입력했을 때:
🎉 안녕하세요! 나이 계산 프로그램입니다. 🎉
당신의 나이를 숫자로 입력해주세요: 30
😊 입력하신 나이는 30살이시군요!
🥳 10년 후에는 40살이 되시겠네요!
👍 나이가 성공적으로 입력되었습니다.
나이 계산 프로그램을 이용해주셔서 감사합니다! 👋
- 문자를 입력했을 때 (예외 발생):
🎉 안녕하세요! 나이 계산 프로그램입니다. 🎉
당신의 나이를 숫자로 입력해주세요: 안녕
💥 이런! '안녕'은(는) 숫자가 아니에요. 숫자로 정확히 입력해주세요.
나이 계산 프로그램을 이용해주셔서 감사합니다! 👋
이처럼 예외 처리를 사용하면 프로그램이 얘기치 않은 상황에도 유연하게 대처할 수 있고, 사용자에게 더 좋은 경험을 제공할 수 있답니다!
'Python' 카테고리의 다른 글
| 파이썬 파일 CRUD 예제(memo.txt 파일 처리) (0) | 2025.05.14 |
|---|---|
| 파이썬 파일 CRUD 예제(예외처리 적용) (0) | 2025.05.14 |
| 파이썬 다형성이 뭐였지? (2) | 2025.05.14 |
| 파이썬 다형성 예제 (1) | 2025.05.14 |
| 파이썬 상속 예제 (0) | 2025.05.14 |