Chapter 7-1. 오류 종류와 기본 예외 처리
1. 구문 오류 (Syntax Error)
괄호의 개수, 들여쓰기 문제 등으로 프로그램이 실행되기도 전에 발생하는 오류입니다.
- 구문 오류는 해결되지 않으면 프로그램 실행이 불가능합니다.
- 오류의 종류
- 프로그램 실행 전에 발생하는 오류를 구문 오류라고 함
- 프로그램 실행 중에 발생하는 오류를 예외 또는 런타임 오류라고 함
- 프로그램 언어의 오류에는 크게 두 가지 종류가 있습니다.
# 정상 실행
print("오류는 아주 사소한 것부터 발생합니다.")
# 출력
오류는 아주 사소한 것부터 발생합니다.
# 닫는 괄호를 생략한 경우
print("오류는 아주 사소한 것부터 발생합니다."
# => SyntaxError: incomplete input 발생
2. 예외 (Runtime Error)
실행 중에 발생하는 오류입니다.
- 오류 키워드를 잘 살펴야 빠른 해결이 가능합니다.
# 정상 실행
print("오류는 아주 사소한 것부터 발생합니다.")
# 출력
오류는 아주 사소한 것부터 발생합니다.
# 예외 발생
dogs.append("말티즈")
# append는 list에 값을 넣어주는 함수입니다.
# dogs는 정의되어 있지 않기 때문에 NameError가 발생합니다.
오류 해결 코드
# 정상 실행
print("오류는 아주 사소한 것부터 발생합니다.")
# 예외 발생 코드 해결
dogs = ["닥스훈트", "시바견"]
dogs.append("말티즈")
print(dogs)
# 출력
오류는 아주 사소한 것부터 발생합니다.
['닥스훈트', '시바견', '말티즈']
3. 예외 처리
- 예외를 해결하는 모든 것을 예외 처리라고 합니다.
- 예외는 조건문을 사용하거나, try 구문을 사용하여 해결할 수 있습니다.
- 구문 오류는 예외 처리로 해결이 불가능하여 코드 자체를 수정해야 해결됩니다.
4. 조건문을 이용한 예외 처리
- 조건문을 이용한 예외 처리 방법을 기본 예외 처리라고 합니다.
- 예외가 발생할 수 있는 상황을 파악하는 것이 중요합니다.
# 밑변과 높이를 입력받아 삼각형의 넓이를 계산하는 코드
x, y = map(int, input("밑변과 높이를 입력해주세요").split(" "))
print(f'삼각형의 넓이는 {x * y / 2}입니다.')
# 입력
3 5
# 출력
삼각형의 넓이는 7.5입니다.
# 입력
3cm 5cm
# 출력
ValueError : invalid literal for int() with base 10: '3cm'
오류 해결 코드
# 밑변과 높이를 입력받아 삼각형의 넓이를 계산하는 코드
x, y = input("밑변과 높이를 입력해주세요").split(" ")
if x.isdigit() and y.isdigit():
x, y = int(x), int(y)
print(f'삼각형의 넓이는 {x * y / 2}입니다.')
else:
print("정수로 입력하지 않아 계산이 불가합니다.")
# 입력
3cm 6cm
# 출력
정수로 입력하지 않아 계산이 불가합니다.
이해도 체크리스트
- 오류의 종류에 대해 설명해주세요.
- 구문 오류 (Syntax Error): 프로그램의 문법적 실수로 발생하며, 프로그램이 실행되기 전에 감지됩니다.
- 예외 (Runtime Error): 프로그램 실행 중 발생하는 오류로, 예외 처리를 통해 해결 가능합니다.
- 오류 종류별로 해결할 수 있는 방법은?
- 구문 오류: 코드의 문법적 오류를 수정하여 해결합니다. (예: 괄호, 들여쓰기 문제 등)
- 예외: 조건문이나 try-except 구문을 통해 해결합니다.
- isdigit() 함수란?
- 문자열이 숫자로만 구성되어 있는지 판단하여 True 또는 False를 반환합니다.
- 사용 예시:
num = "1234" print(num.isdigit()) # True num = "123a" print(num.isdigit()) # False
🚀 정리 및 요약
구분 설명 예시
구문 오류 | 문법적 실수로 프로그램이 실행되기 전에 발생 | 괄호 미작성, 들여쓰기 문제 |
예외 | 프로그램 실행 중 발생하는 오류 | 정의되지 않은 변수 사용 등 |
예외 처리 | 조건문, try-except로 예외 상황을 처리 | if, try 사용 |
isdigit() | 문자열이 숫자인지 확인 | "1234" -> True |
📝 Tip!
- 예외는 사전에 조건문으로 걸러내면 프로그램이 더욱 안정적으로 실행됩니다.
- 구문 오류는 프로그램 실행 전에 반드시 수정해야 합니다!
'''
📚 오류의 종류와 해결 방법 정리
✅ 1. 오류의 종류에 대해 설명해주세요
오류 종류 설명 예시
구문 오류 (Syntax Error) | 코드의 문법적 실수로 인해 프로그램 실행이 불가능한 오류 | 괄호가 맞지 않거나, 들여쓰기 오류가 있는 경우 |
예외 (Runtime Error) | 프로그램이 실행되는 중에 발생하는 오류로, 주로 예상치 못한 입력이나 잘못된 연산 등으로 발생 | 정의되지 않은 변수를 사용하거나 리스트 인덱스를 벗어나는 경우 |
📌 구문 오류 (Syntax Error)
- 프로그램을 실행하기도 전에 발생하는 오류입니다.
- 괄호, 들여쓰기, 문법 오류 등으로 인해 발생합니다.
- 해결되지 않으면 프로그램이 실행되지 않습니다.
# 구문 오류 예제 - 괄호를 닫지 않아서 발생
print("오류는 아주 사소한 것부터 발생합니다."
# 출력
# SyntaxError: incomplete input 발생
📌 예외 (Runtime Error)
- 프로그램이 실행되는 중간에 발생하는 오류입니다.
- 정의되지 않은 변수를 사용하거나, 리스트 인덱스를 잘못 사용했을 때 발생합니다.
# 예외 발생 예제
dogs.append("말티즈")
# 출력
# NameError: name 'dogs' is not defined
✅ 2. 오류 종류별로 해결할 수 있는 방법에 대해 설명해주세요
오류 종류 해결 방법
구문 오류 | 문법적으로 잘못된 부분을 직접 수정해야 합니다. 괄호나 들여쓰기, 잘못된 키워드 등을 수정해줍니다. |
예외 | try-except 구문을 사용하여 예외를 사전에 처리하거나, 입력을 조건문으로 검사하여 예외 발생을 방지합니다. |
📌 구문 오류 해결 방법
- 문법적으로 잘못된 부분을 수정해야 합니다.
# 잘못된 코드
print("오류는 아주 사소한 것부터 발생합니다."
# 수정된 코드
print("오류는 아주 사소한 것부터 발생합니다.")
📌 예외 처리 방법 (try-except 사용)
try:
dogs = ["닥스훈트", "시바견"]
dogs.append("말티즈")
print(dogs)
except NameError:
print("리스트가 정의되어 있지 않습니다.")
- try 블록에서 예외가 발생하면, except 블록이 실행되어 오류 메시지를 출력합니다.
✅ 3. isdigit() 함수에 대해 설명해주세요
- isdigit() 함수는 문자열이 숫자로만 구성되어 있는지 확인하는 함수입니다.
- 문자열이 숫자라면 True, 그렇지 않다면 False를 반환합니다.
📌 사용 예제
num1 = "1234"
num2 = "1234a"
print(num1.isdigit()) # 출력: True
print(num2.isdigit()) # 출력: False
- num1은 숫자로만 구성되어 있어 True를 반환하고,
- num2는 문자 'a'가 포함되어 있어 False를 반환합니다.
📌 isdigit()을 활용한 예외 처리
x, y = input("밑변과 높이를 입력해주세요").split(" ")
if x.isdigit() and y.isdigit():
x, y = int(x), int(y)
print(f'삼각형의 넓이는 {x * y / 2}입니다.')
else:
print("정수로 입력하지 않아 계산이 불가합니다.")
- 입력된 값이 숫자인지 먼저 검사하여, 정수로 변환 가능한 경우에만 계산을 진행합니다.
- 입력값에 숫자가 아닌 문자가 포함되어 있으면 오류 메시지를 출력하여 예외를 방지합니다.
🚀 정리
- isdigit()은 숫자로만 이루어진 문자열을 판별할 때 사용합니다.
- 예외 처리를 통해 입력값의 유효성을 검증할 수 있습니다.
- 오류는 구문 오류와 예외로 구분되며, 각각에 맞는 해결 방법을 사용해야 합니다.
이해가 안되거나 더 알고 싶은 부분이 있다면, 언제든지 물어봐 주세요! 😊
'Python' 카테고리의 다른 글
PYTHON - 예외처리와 모듈 (Chapter 7-35. 예외 객체와 구분하기) (0) | 2025.03.14 |
---|---|
PYTHON - 예외처리와 모듈 (Chapter 7-34. try except 구문) (0) | 2025.03.14 |
프로젝트: 간단한 주소록 관리 시스템 (0) | 2025.03.14 |
[[OZ코딩스쿨] 초격차 캠프 - 10일차 (함수) 심화 문제풀이 (0) | 2025.03.13 |
📌 Python 학습 과정 – 이해와 반복의 중요성 (0) | 2025.03.13 |