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 어찌됐든 무조건 실행해! (finallyelse)

tryexcept 뒤에 추가로 붙여서 더욱 똑똑한 에러 처리를 할 수도 있습니다.

  • else : 에러가 안 터지고 무사히 끝났을 때만 기분 좋게 실행되는 보너스 구역입니다.
  • finally : 에러가 터지든 안 터지든 마지막에 무조건 100% 실행되는 구역입니다. 주로 열려있는 파일을 닫거나 뒷정리를 할 때 꼭 씁니다.
try:
    print("게임을 로딩합니다...")
    # raise 구문은 일부러 에러를 강제로 던져서 테스트할 때 씁니다!
    # raise Exception("강제 에러 던지기!")
except Exception as e:
    print("에러 발생! 로딩 실패!")
else:
    print("에러가 한 번도 안 터졌네? 게임 시작!")
finally:
    print("게임이 성공하든 터지든 이 문장은 무조건 출력돼!")

이 4가지 키워드만 알면 여러분은 어떤 에러 폭탄이 터져도 끄떡없는 무적의 프로그램을 짤 수 있습니다!

서브목차