안녕하세요! 이제 파이썬의 기본적인 입출력과 연산자까지 배우셨으니, 코드를 작성하며 조금씩 익숙해지고 있을 것입니다. 하지만 프로그래밍을 하다 보면 피할 수 없는 것이 하나 있습니다. 바로 **오류(Error)**입니다! 😢
처음에는 오류 메시지를 보면 당황스럽고 무엇이 잘못되었는지 알기 어려울 수 있습니다. 하지만 걱정 마세요! 오류는 여러분이 코드를 더 잘 이해하고, 문제를 해결하는 능력을 키울 수 있는 훌륭한 학습 기회입니다.
이번 시간에는 파이썬에서 오류가 왜 발생하는지, 그리고 오류 메시지를 어떻게 읽고 해석해야 하는지에 대해 자세히 알아보겠습니다.
Part 1: 오류(Error)란 무엇인가?
프로그램이 예상치 못한 방식으로 동작하거나, 아예 실행되지 않는 모든 문제를 통틀어 오류(Error) 또는 **버그(Bug)**라고 부릅니다. 이러한 오류는 크게 두 가지 유형으로 나눌 수 있습니다.
- 문법 오류 (Syntax Error):
- 파이썬이 이해할 수 없는 잘못된 문법으로 코드를 작성했을 때 발생합니다. 마치 한국어 문법을 틀리게 쓰는 것과 같습니다.
- 이런 오류는 프로그램이 실행되기 전에 파이썬 인터프리터가 코드를 읽다가 발견하고 바로 알려줍니다. 문법 오류를 수정하지 않으면 프로그램은 아예 실행되지 않습니다.
- 런타임 오류 (Runtime Error) / 예외 (Exception):
- 문법적으로는 문제가 없어서 일단 프로그램이 실행은 되지만, 특정 조건에서 예상치 못한 문제가 발생하여 더 이상 진행할 수 없을 때 발생합니다.
- 예를 들어, 숫자를 0으로 나누려 하거나, 존재하지 않는 파일을 열려고 할 때 발생합니다. 이러한 런타임 오류를 파이썬에서는 **예외(Exception)**라고 부릅니다. 예외가 발생하면 프로그램은 '예외 처리'를 하지 않는 한 강제로 중단됩니다.
이제 이러한 오류 메시지를 어떻게 읽어야 하는지 살펴보겠습니다.
Part 2: 에러 메시지 읽는 법 - 당황하지 마세요!
파이썬에서 오류가 발생하면 친절하게도(?) 오류 메시지를 터미널에 출력해줍니다. 처음에는 복잡해 보이지만, 메시지의 주요 부분을 알면 쉽게 해결할 수 있습니다.
일반적인 파이썬 에러 메시지의 구조는 다음과 같습니다:
- Traceback (추적 메시지):
- 오류가 발생하기까지 프로그램이 어떤 함수들을 호출하며 진행되었는지를 역순으로 보여줍니다. 가장 위에 있는 호출이 가장 먼저 발생한 것이고, 가장 아래 줄에 있는 파일과 줄 번호가 실제 오류가 발생한 지점입니다.
- 가장 중요한 부분이며, 맨 아래 줄부터 위로 거슬러 올라가면서 읽는 것이 핵심입니다.
- File Name and Line Number (파일 이름 및 줄 번호):
- 오류가 발생한 파일의 이름과 해당 코드 줄 번호를 정확히 알려줍니다. 이 정보가 가장 먼저 확인해야 할 부분입니다.
- Error Type (오류 종류):
- 어떤 종류의 오류가 발생했는지 알려줍니다. (예: SyntaxError, NameError, TypeError 등) 이 이름을 알면 어떤 문제를 해결해야 할지 단서를 얻을 수 있습니다.
- Error Message (오류 설명):
- 오류가 발생한 구체적인 원인을 설명해줍니다. 때로는 파이썬이 어떤 부분을 잘못 이해했는지 ^ 기호로 가리켜 주기도 합니다.
# 파일 이름: error_example.py
# 일부러 문법 오류를 만들었습니다.
my_variable = "Hello"
print(my_variable
# NameError를 일으킬 변수
# undefined_var = 10 # 주석 처리하여 NameError 유발
# print(undefined_var)
# TypeError를 일으킬 연산
num = 10
text = "5"
# print(num + text) # 주석 처리하여 TypeError 유발
[VS Code 터미널 출력 - 오류 메시지]

(위 터미널 출력은 print(my_variable 에서 닫는 괄호 )가 없어서 발생하는 SyntaxError 예시입니다. 파일 경로와 줄 번호는 여러분의 환경에 따라 다르게 나타날 수 있습니다.)
Part 3: 자주 만나는 오류 유형과 해결법
이제 실제 자주 만나게 될 몇 가지 오류 유형을 살펴보고, 어떻게 해결할 수 있는지 알아봅시다.
1. SyntaxError: invalid syntax (문법 오류)
- 원인: 파이썬 문법 규칙을 지키지 않았을 때 발생합니다. 오타, 괄호나 따옴표 누락, 콜론(:) 누락 등이 흔합니다.
- 해결: 에러 메시지에서 가리키는 줄 번호를 확인하고, 해당 줄의 문법이 파이썬 규칙에 맞는지 꼼꼼히 확인합니다.
예시 코드 (오류 유발):
# 파일 이름: syntax_error_example.py
# print 오타
pritn("Hello")
# if 문에 콜론(:) 누락
if True
print("조건문입니다.")
# 따옴표 닫지 않음
message = "파이썬 배우기
VS Code 터미널 출력 (시뮬레이션):
Traceback (most recent call last):
File "c:\Users\YourUser\Documents\python_codes\syntax_error_example.py", line 4
if True
^
SyntaxError: expected ':'
# 파일 이름: syntax_error_example.py
# print 오타
pritn("Hello")
# if 문에 콜론(:) 누락
if True
print("조건문입니다.")
# 따옴표 닫지 않음
message = "파이썬 배우기
[VS Code 터미널 출력 - SyntaxError]

2. IndentationError (들여쓰기 오류)
- 원인: 파이썬에서 코드 블록을 구분하는 들여쓰기 규칙을 지키지 않았을 때 발생합니다. 공백과 탭을 섞어 쓰거나, 들여쓰기 깊이가 일관되지 않을 때 자주 발생합니다. (1-4 포스팅에서 들여쓰기의 중요성을 강조했었죠!)
- 해결: 오류가 발생한 줄과 그 주변 줄의 들여쓰기 공백/탭 개수를 확인하고, PEP 8 표준(공백 4칸)에 맞게 통일합니다. VS Code의 자동 들여쓰기 기능을 활용하면 좋습니다.
예시 코드 (오류 유발):
# 파일 이름: indentation_error_example.py
if True:
print("이것은 잘못된 들여쓰기입니다.") # if문 아래에 들여쓰기 없음
VS Code 터미널 출력 (시뮬레이션):
Traceback (most recent call last):
File "c:\Users\YourUser\Documents\python_codes\indentation_error_example.py", line 4
print("이것은 잘못된 들여쓰기입니다.")
IndentationError: expected an indented block
# 파일 이름: indentation_error_example.py
if True:
print("이것은 잘못된 들여쓰기입니다.")
[VS Code 터미널 출력 - IndentationError]

3. NameError: name 'xxx' is not defined (이름 오류)
- 원인: 존재하지 않는 변수나 함수 이름을 사용하려고 할 때 발생합니다. 오타가 나거나, 변수를 선언하기 전에 사용했을 때 흔합니다.
- 해결: 오류 메시지에서 가리키는 이름을 정확히 확인하고, 해당 이름이 올바르게 철자되었는지, 사용하기 전에 정의되었는지 확인합니다.
예시 코드 (오류 유발):
# 파일 이름: name_error_example.py
# 선언되지 않은 변수 사용
print(my_age)
# 함수 이름 오타
def greet_user(name):
print(f"Hello, {name}!")
greett_user("Alice") # greet_user를 greett_user로 오타
VS Code 터미널 출력 (시뮬레이션):
Traceback (most recent call last):
File "c:\Users\YourUser\Documents\python_codes\name_error_example.py", line 4, in <module>
print(my_age)
NameError: name 'my_age' is not defined
# 파일 이름: name_error_example.py
# 선언되지 않은 변수 사용
print(my_age)
# 함수 이름 오타
def greet_user(name):
print(f"Hello, {name}!")
greett_user("Alice")
[VS Code 터미널 출력 - NameError]

4. TypeError: unsupported operand type(s) for +: 'int' and 'str' (타입 오류)
- 원인: 호환되지 않는 자료형끼리 연산을 시도했을 때 발생합니다. 예를 들어, 숫자와 문자열을 덧셈하려고 할 때 (1-6 포스팅에서 input() 함수 설명 시 강조했던 부분입니다).
- 해결: 연산을 수행하기 전에 자료형을 int(), float(), str() 등을 사용하여 올바른 자료형으로 변환합니다.
예시 코드 (오류 유발):
# 파일 이름: type_error_example.py
num = 10
text = "5"
# 숫자와 문자열을 직접 더하기 시도
print(num + text)
VS Code 터미널 출력 (시뮬레이션):
Traceback (most recent call last):
File "c:\Users\YourUser\Documents\python_codes\type_error_example.py", line 5, in <module>
print(num + text)
TypeError: unsupported operand type(s) for +: 'int' and 'str'
# 파일 이름: type_error_example.py
num = 10
text = "5"
# 숫자와 문자열을 직접 더하기 시도
print(num + text)
[VS Code 터미널 출력 - TypeError]

5. ValueError: invalid literal for int() with base 10: 'abc' (값 오류)
- 원인: 함수는 올바른 자료형을 기대하지만, 그 자료형 내에서 유효하지 않은 값을 받았을 때 발생합니다. 예를 들어, 숫자로 변환할 수 없는 "abc"와 같은 문자열을 int() 함수에 전달할 때.
- 해결: 함수에 전달되는 값의 유효성을 확인하거나, 사용자의 입력을 받을 때는 변환 전에 유효한 값인지 검증하는 로직을 추가합니다.
예시 코드 (오류 유발):
# 파일 이름: value_error_example.py
# 숫자로 변환할 수 없는 문자열을 int() 함수에 전달
invalid_number_str = "abc"
converted_num = int(invalid_number_str) # 여기서 오류 발생
print(converted_num)
VS Code 터미널 출력 (시뮬레이션):
Traceback (most recent call last):
File "c:\Users\YourUser\Documents\python_codes\value_error_example.py", line 5, in <module>
converted_num = int(invalid_number_str)
ValueError: invalid literal for int() with base 10: 'abc'
# 파일 이름: value_error_example.py
# 숫자로 변환할 수 없는 문자열을 int() 함수에 전달
invalid_number_str = "abc"
converted_num = int(invalid_number_str)
print(converted_num)
[VS Code 터미널 출력 - ValueError]

6. ZeroDivisionError: division by zero (0으로 나누기 오류)
- 원인: 숫자를 0으로 나누려고 할 때 발생합니다. 수학적으로 불가능한 연산입니다.
- 해결: 나누기 연산을 수행하기 전에 분모가 0이 아닌지 확인하는 조건을 추가합니다.
예시 코드 (오류 유발):
# 파일 이름: zero_division_error_example.py
numerator = 10
denominator = 0
result = numerator / denominator # 0으로 나누기 시도
print(result)
VS Code 터미널 출력 (시뮬레이션):
Traceback (most recent call last):
File "c:\Users\YourUser\Documents\python_codes\zero_division_error_example.py", line 5, in <module>
result = numerator / denominator
ZeroDivisionError: division by zero
# 파일 이름: zero_division_error_example.py
numerator = 10
denominator = 0
result = numerator / denominator
print(result)
[VS Code 터미널 출력 - ZeroDivisionError]

마무리하며
이번 시간에는 파이썬에서 오류가 발생하는 이유와 종류, 그리고 무엇보다 중요한 오류 메시지를 읽고 해석하는 방법에 대해 상세하게 알아보았습니다. 처음에는 어렵게 느껴질 수 있지만, 오류 메시지는 여러분에게 "어디가, 왜 잘못되었는지" 알려주는 매우 중요한 단서임을 기억해주세요.
이제 오류를 만나더라도 당황하지 않고, 메시지를 분석하여 해결책을 찾아 나설 수 있는 기본적인 준비를 갖추게 되었습니다. 이러한 경험들이 쌓여 여러분을 더 좋은 개발자로 만들어 줄 것입니다.
다음 포스팅부터는 조건문과 반복문을 통해 프로그램의 흐름을 제어하는 방법에 대해 본격적으로 배우게 될 것입니다.
궁금한 점이 있다면 언제든지 질문해주세요! 다음 포스팅에서 만나요!
'Python' 카테고리의 다른 글
2-2. 비교/논리 연산자 활용 조건 판단 (0) | 2025.06.21 |
---|---|
2-1. if, elif, else 조건문 (0) | 2025.06.20 |
1-7. 파이썬 기본 연산자 (산술, 비교, 논리) (0) | 2025.06.20 |
1-6. 사용자 입력과 출력 (input, print) (0) | 2025.06.17 |
1-5. 변수와 자료형 (숫자, 문자열, 불린) (2) | 2025.06.08 |