파이썬 기초 공부를 시작하면 누구나 빨간색 에러 메시지를 마주하고 당황하기 마련입니다. 코드가 왜 실행되지 않는지 몰라 답답했던 경험이 있으실 텐데, 이는 코딩 실력이 쌓이는 과정에서 겪는 아주 자연스러운 현상입니다. 자주 발생하는 에러의 원인과 해결법을 미리 익혀두면 코딩 초보자도 막힘없이 학습을 이어갈 수 있으니 이 글을 통해 에러 해결 능력을 키워보시기 바랍니다.
SyntaxError 구문 규칙을 어겼을 때 나타나는 신호
파이썬을 포함한 모든 프로그래밍 언어에는 지켜야 할 문법 규칙이 있습니다. SyntaxError는 바로 이 규칙을 지키지 않았을 때 발생합니다. 가장 흔한 경우는 마침표나 쉼표를 잘못 찍었거나, 괄호를 닫지 않았을 때입니다. 파이썬은 문법에 매우 엄격하기 때문에 작은 오타 하나도 그냥 지나치지 않습니다.
특히 조건문이나 반복문을 사용할 때 끝에 콜론(:)을 빠뜨리는 실수가 굉장히 많습니다. 예를 들어 if 문이나 for 문을 작성한 뒤 마지막에 콜론을 찍지 않으면 파이썬은 다음 줄로 넘어가지 못하고 에러를 뱉어냅니다. 또한 문자열을 감싸는 따옴표의 짝이 맞지 않을 때도 이 에러가 발생하므로 코드를 꼼꼼히 살피는 습관이 중요합니다.
IndentationError 파이썬의 핵심인 들여쓰기 실수
다른 언어와 달리 파이썬은 들여쓰기 자체가 코드의 구조를 결정하는 아주 중요한 요소입니다. IndentationError는 들여쓰기 간격이 일정하지 않거나, 꼭 필요한 곳에 들여쓰기가 되어 있지 않을 때 발생합니다. 보통 스페이스바 4번을 사용하는 것이 파이썬 기초의 표준 규칙입니다.
코딩 초보자들은 간혹 스페이스바와 탭(Tab) 키를 혼용해서 사용하곤 합니다. 눈으로 보기에는 간격이 같아 보일 수 있지만, 파이썬 해석기는 이를 서로 다른 것으로 인식하여 에러를 일으킵니다. 따라서 처음부터 한 가지 방법으로 통일하여 입력하는 것이 좋으며, 최근에는 Visual Studio Code와 같은 에디터가 이를 자동으로 교정해 주기도 합니다.
에러 유형별 주요 원인 및 요약
| 에러 명칭 | 주요 발생 원인 | 가장 빠른 해결 방법 |
|---|---|---|
| SyntaxError | 오타, 괄호 누락, 콜론(:) 미기입 | 에러가 표시된 줄의 앞뒤 문법 확인 |
| IndentationError | 들여쓰기 간격 불일치, 탭과 공백 혼용 | 전체 코드를 스페이스 4칸으로 통일 |
| NameError | 오타 난 변수명, 정의되지 않은 함수 호출 | 변수 이름의 철자와 대소문자 확인 |
| TypeError | 숫자와 문자를 더하는 등 자료형 불일치 | 데이터 타입을 변환(str, int 등)하여 맞춤 |
NameError 정의되지 않은 변수나 함수 사용
NameError는 프로그램이 인식하지 못하는 이름을 만났을 때 발생합니다. 주로 변수 이름을 지어줄 때 오타가 났거나, 변수를 선언하기도 전에 먼저 사용하려고 할 때 나타납니다. 파이썬은 대소문자를 엄격하게 구분하기 때문에 ‘apple’과 ‘Apple’은 완전히 다른 변수로 취급된다는 점을 기억해야 합니다.
또한 외부 라이브러리를 사용할 때 import 문을 빠뜨려도 이 에러가 발생합니다. 예를 들어 수학 계산을 위해 math 모듈을 쓰려고 하는데, 코드 상단에 불러오지 않았다면 파이썬은 해당 기능을 찾을 수 없다고 불평하게 됩니다. 이름을 사용하기 전에 반드시 정의되었는지, 철자는 맞는지 확인하는 절차가 필요합니다.
TypeError 자료형이 서로 맞지 않는 경우
파이썬은 데이터의 종류에 따라 할 수 있는 연산이 정해져 있습니다. TypeError는 숫자와 문자를 억지로 더하려고 하거나, 반복할 수 없는 데이터에 반복문을 쓰려고 할 때 발생합니다. 파이썬 기초 단계에서 가장 많이 겪는 상황은 ‘나이는 20살입니다’와 같은 문장을 만들 때 숫자 20을 문자열로 바꾸지 않고 더하는 경우입니다.
이럴 때는 str() 함수를 사용하여 숫자를 문자로 바꾸거나, f-string 같은 편리한 문법을 사용하여 자료형을 맞춰주어야 합니다. 파이썬은 유연한 언어이지만, 연산의 대상이 되는 데이터들의 성격이 다를 때는 명확한 지침을 주어야 에러 없이 작동합니다.
효율적인 디버깅을 위한 필수 체크리스트
- 에러 메시지의 가장 아랫줄에 적힌 에러 이름을 먼저 읽습니다.
- 파일 경로 옆에 표시된 숫자를 보고 에러가 발생한 정확한 위치를 찾습니다.
- Visual Studio Code의 자동 완성 기능을 활용해 변수명 오타를 방지합니다.
- 코드를 한 줄씩 실행해보며 어느 부분에서 멈추는지 확인합니다.
- 작성한 코드에 주석()을 달아 로직을 다시 한번 정리해 봅니다.
IndexError 리스트의 범위를 벗어난 접근
리스트(List)는 여러 데이터를 하나로 묶어 관리할 때 유용하지만, 인덱스 번호를 다룰 때 주의가 필요합니다. IndexError는 리스트에 들어있는 아이템 개수보다 더 큰 번호로 접근하려고 할 때 발생합니다. 파이썬의 번호 매기기는 1이 아닌 0부터 시작한다는 점을 잊지 마세요.
만약 세 개의 값이 들어있는 리스트에서 세 번째 값을 가져오고 싶다면 인덱스 번호 2를 사용해야 합니다. 3을 입력하면 범위를 벗어났다는 메시지가 뜹니다. 리스트의 길이를 미리 알 수 없을 때는 len() 함수를 사용하여 전체 개수를 확인한 뒤 접근하는 방식이 안전합니다.
KeyError 딕셔너리에 없는 키를 찾을 때
딕셔너리(Dictionary)는 ‘키(Key)’와 ‘값(Value)’이 한 쌍으로 이루어진 자료구조입니다. KeyError는 존재하지 않는 키를 호출했을 때 나타납니다. 리스트의 IndexError와 비슷한 성격을 띠지만, 숫자가 아닌 이름으로 데이터를 찾는 딕셔너리에서 더 자주 빈번하게 발생합니다.
이 에러를 방지하려면 get() 메서드를 사용하는 것이 좋습니다. 직접 키를 호출하면 에러가 나면서 프로그램이 멈추지만, get()을 쓰면 키가 없을 때 에러 대신 ‘None’을 반환하거나 기본값을 돌려주어 프로그램이 안정적으로 돌아가게 도와줍니다. 데이터의 존재 여부를 미리 확인하는 습관은 코딩 초보자가 갖춰야 할 중요한 역량입니다.
초보자를 위한 파이썬 편집 도구 비교
| 도구 이름 | 에러 진단 특징 | 추천 대상 |
|---|---|---|
| Visual Studio Code | 다양한 확장 프로그램으로 실시간 에러 강조 | 가볍고 범용적인 도구를 원하는 초보자 |
| PyCharm | 강력한 코드 분석 및 자동 수정 제안 기능 | 파이썬 프로젝트를 깊이 있게 학습할 학습자 |
| Jupyter Notebook | 코드 셀 단위로 실행하여 에러 위치 파악 용이 | 데이터 분석 및 학습 내용을 정리하려는 분 |
| Google Colab | 설치 없이 브라우저에서 실행 및 에러 공유 가능 | 사양 낮은 PC 사용자 및 공동 작업자 |
AttributeError 객체에 없는 속성이나 메서드 호출
마지막으로 살펴볼 AttributeError는 특정 데이터 타입이 할 수 없는 기능을 시청할 때 발생합니다. 예를 들어 리스트에는 ‘append’라는 기능이 있지만, 숫자 데이터에는 그런 기능이 없습니다. 만약 숫자 변수에 억지로 리스트 기능을 쓰려고 하면 파이썬은 해당 속성이 없다는 에러를 보여줍니다.
이는 주로 사용하려는 함수나 메서드의 이름을 잘못 알고 있거나, 현재 다루고 있는 데이터의 타입을 착각하고 있을 때 자주 나타납니다. type() 함수를 사용하여 현재 변수가 어떤 자료형인지 수시로 확인하면 이러한 실수를 크게 줄일 수 있습니다. 각 자료형이 가진 고유한 기능들을 익히는 것이 파이썬 기초를 탄탄히 다지는 지름길입니다.
코딩 효율을 높이는 학습 도구 활용
- Python Tutor 사이트에서 코드가 한 줄씩 실행되는 과정을 시각적으로 관찰합니다.
- Stack Overflow에서 에러 메시지를 검색하여 전 세계 개발자들의 해결책을 참고합니다.
- ChatGPT와 같은 AI 도구에 에러 메시지를 복사하여 원인 분석을 요청합니다.
- 공식 문서(docs.python.org)를 통해 함수 사용법을 정확히 숙지합니다.
- 자주 틀리는 에러를 따로 정리하여 자신만의 오답 노트를 만듭니다.
파이썬 에러 메시지 해결 관련 자주 묻는 질문(FAQ)
에러 메시지가 너무 길어서 어디부터 읽어야 할지 모르겠어요.
파이썬 에러 메시지는 가장 마지막 줄에 핵심 정보가 담겨 있습니다. 어떤 종류의 에러인지와 간단한 설명이 맨 아래에 나오므로 거기를 먼저 확인하세요. 그다음으로 바로 윗부분에 적힌 파일 경로와 숫자를 보면 몇 번째 줄에서 문제가 생겼는지 알 수 있습니다. 전체를 다 읽기보다 마지막 줄과 줄 번호를 찾는 것이 해결의 핵심입니다.
들여쓰기를 할 때 스페이스바와 탭 중 무엇이 더 좋은가요?
파이썬 공식 가이드라인(PEP 8)에서는 스페이스바 4칸을 강력하게 권장하고 있습니다. 탭 키는 환경에 따라 간격이 다르게 보일 수 있어 협업 시 문제를 일으킬 수 있기 때문입니다. 대부분의 최신 편집기인 Visual Studio Code에서는 탭 키를 눌러도 자동으로 스페이스 4칸으로 변환해 주는 기능이 있으니 이를 활용하면 편리합니다.
분명히 맞게 쓴 것 같은데 NameError가 계속 나와요.
대부분 대소문자 구분을 확인하지 않았거나 오타가 원인입니다. 예를 들어 파이썬 기초에서 변수를 ‘my_value’라고 만들고 나중에 ‘my_Value’라고 부르면 에러가 납니다. 또한 함수 안에서 만든 변수를 함수 밖에서 쓰려고 할 때도 발생할 수 있습니다. 변수가 선언된 위치(범위)와 철자를 다시 한번 꼼꼼하게 대조해 보시기 바랍니다.
TypeError를 예방할 수 있는 가장 좋은 습관은 무엇인가요?
데이터의 정체를 수시로 의심해 보는 것이 좋습니다. 사용자로부터 입력을 받는 input() 함수는 모든 것을 문자로 받아들이기 때문에, 계산을 하려면 반드시 int()나 float()로 감싸주어야 합니다. 작업 중간에 print(type(변수명))을 넣어 현재 데이터가 숫자인지 문자인지 확인하는 습관을 들이면 에러를 사전에 막을 수 있습니다.
IndexError가 나지 않게 리스트를 안전하게 다루는 법이 있나요?
리스트의 인덱스가 0부터 시작한다는 점을 항상 명심해야 합니다. 10개의 항목이 있다면 마지막 번호는 9입니다. 가장 마지막 항목을 가져오고 싶을 때는 숫자를 세기보다 인덱스 번호에 -1을 사용하는 것이 훨씬 안전하고 편리합니다. 리스트의 범위를 동적으로 체크하는 len() 함수를 조건문과 함께 활용하는 것도 좋은 방법입니다.
에러 메시지를 검색해도 해결책이 안 나올 때는 어떻게 하나요?
에러 메시지 중 파일 경로나 사용자 이름 같은 개인적인 부분을 제외하고 핵심 문구만 복사해서 검색해 보세요. 영문으로 검색하면 훨씬 방대한 자료를 얻을 수 있습니다. 만약 그래도 안 된다면 Visual Studio Code의 디버깅 모드를 켜서 코드가 멈추는 지점의 변수 상태를 관찰해 보세요. 대부분은 로직 설계 단계의 작은 착각에서 비롯된 경우가 많습니다.