1. 에러 잡는 마법의 그물: try ~ except
우리가 파이썬에게 일을 시키다 보면, 크게 두 가지 종류의 에러를 만납니다. 하나는 ‘말이 안 되는 문법’을 썼을 때 파이썬이 아예 이해를 못 하는 문법 에러! 다른 하나는 문법은 맞는데 실행하다가 문제가 생기는 런타임 에러입니다.
1.1 내가 글을 잘못 썼네! (블록문, 오타 에러)
이 에러들은 우리가 파이썬의 맞춤법을 틀렸을 때 파이썬이 처음부터 차갑게 실행을 거부하는 에러들입니다. 보통 빨간 줄이 쭉 그어집니다.
SyntaxError(문법 오류): 괄호를 안 닫았거나, 콜론(:)을 빼먹은 경우!IndentationError(들여쓰기 오류):if문이나for문 안에 들여쓰기를 제대로 맞추지 않아 줄이 삐뚤빼뚤할 때 발생합니다.NameError(이름 오류): 아직 만들지도 않은 변수 이름을 부르면 “걔가 누군데요?” 하면서 화를 냅니다.
이런 에러들은 그물이 아니라, 우리 스스로 오타를 즉시 찾아내서 고쳐주어야 합니다!
1.2 안전 그물 던지기: try, except
맞춤법(문법)은 완벽해도, 막상 코드를 돌리다 보면 유저가 이상한 값을 넣어서 에러가 터질 때가 있습니다. 이럴 땐 프로그램이 튕기지 않도록 안전 그물을 쳐야 합니다.
try: “일단 이 코드를 시도(Try)해 봐!”except: “만약 에러가 터지면 튕기지 말고, 여기 쓰인 코드를 대신 실행해!”
try:
# 에러가 발생할지도 모르는 위험한 구역!
print("사냥을 시작해 볼까?")
result = 10 / 0 # 수학에서 0으로 나누는 건 불가능하므로 에러 발생!
except ZeroDivisionError as e:
# 0으로 나눴을 때 발생하는 특별한 에러를 잡는 그물!
print(f"삐용삐용! 에러가 잡혔습니다: {e}")
이 코드를 실행하면 프로그램이 강제 종료되는 대신, 부드럽게 메시지만 남기고 다음 코드로 잘 넘어갑니다.
1.3 어찌됐든 무조건 실행해! (finally와 else)
try와 except 뒤에 추가로 붙여서 더욱 똑똑한 에러 처리를 할 수도 있습니다.
else: 에러가 안 터지고 무사히 끝났을 때만 기분 좋게 실행되는 보너스 구역입니다.finally: 에러가 터지든 안 터지든 마지막에 무조건 100% 실행되는 구역입니다. 주로 열려있는 파일을 닫거나 뒷정리를 할 때 꼭 씁니다.
try:
print("게임을 로딩합니다...")
# raise 구문은 일부러 에러를 강제로 던져서 테스트할 때 씁니다!
# raise Exception("강제 에러 던지기!")
except Exception as e:
print("에러 발생! 로딩 실패!")
else:
print("에러가 한 번도 안 터졌네? 게임 시작!")
finally:
print("게임이 성공하든 터지든 이 문장은 무조건 출력돼!")
이 4가지 키워드만 알면 여러분은 어떤 에러 폭탄이 터져도 끄떡없는 무적의 프로그램을 짤 수 있습니다!
서브목차