Python
PYTHON - 예외처리와 모듈 (Chapter 7-35. 예외 객체와 구분하기)
Chansman
2025. 3. 14. 11:33
Chapter 7-35. 예외 객체와 구분하기
1. 예외 객체(Exception)
Exception을 사용하면 예외의 종류에 대해 알 수 있습니다.
try:
x, y = map(int, input("벌병과 높이를 입력해주세요").split(" "))
print(f'삼각형의 높이는 {x * y / 2}입니다.')
except Exception as exception:
print("type(exception):", type(exception))
print("exception:", exception)
입력 / 출력 예제
- 입력: 3cm 5cm
- 출력:
type(exception): <class 'ValueError'>
exception: invalid literal for int() with base 10: '3cm'
2. 예외 구분하기
다양한 예외가 발생하는 상황을 구분지역 대비하기 위해 예외 구분을 합니다.
try:
number_input = int(input("찾고싶은 값의 위치를 입력해주세요"))
print(f'{number_input}번째 요소 : {numbers[number_input]}')
except ValueError:
print("정수로 입력해주세요")
except IndexError:
print("리스트의 범위를 버석나왔습니다.")
3. 예외 구분 구문과 예외 객체
as 키워드를 이용해 객체의 속성과 메서드에 접근할 수 있습니다.
try:
number_input = int(input("찾고싶은 값의 위치를 입력해주세요"))
print(f'{number_input}번째 요소 : {numbers[number_input]}')
except ValueError as exception:
print("정수로 입력해주세요")
print("Exception:", exception)
except IndexError as exception:
print("리스트의 범위를 버석나왔습니다.")
print("Exception:", exception)
4. 모든 예외처리(Exception)
Exception 객체를 이용해 가장 많은 예외 사항을 처리할 수 있습니다.
try:
number_input = int(input("찾고싶은 값의 위치를 입력해주세요"))
print(f'{number_input}번째 요소 : {numbers[number_input]}')
오류를.만들거야
except ValueError as exception:
print("정수로 입력해주세요")
print("Exception:", exception)
except Exception as exception:
print("대처 불가한 예외가 발생했습니다.")
print("Exception:", exception)
이호도 체크리스트
- 예외 객체를 이용해 예외의 종류와 구체적인 이유를 알려주세요.
- Exception 객체를 가장 확인하게 잘 사용할 수 있는 것은 무엇인가요?
예외 종류와 설명
1. 구문 오류 (Syntax Error)
- 정의: 프로그램 실행 이전, 코드의 문법적 오류로 인해 발생하는 오류입니다.
- 원인: 괄호 개수 불일치, 잘못된 들여쓰기, 오타 등.
- 특징:
- 프로그램이 실행되기 전 오류가 발생합니다.
- 오류가 해결되지 않으면 프로그램 실행이 불가능합니다.
예시
# 올바른 코드
print("오류는 아주 사소한 것부터 발생합니다.")
# 괄호를 생략한 경우
print("오류는 아주 사소한 것부터 발생합니다."
# SyntaxError: unexpected EOF while parsing
2. 예외 (Runtime Error)
- 정의: 프로그램 실행 중 발생하는 오류입니다.
- 원인: 정의되지 않은 변수 참조, 0으로 나누기, 잘못된 데이터 형식 등.
- 특징:
- 프로그램이 실행 중일 때 오류가 발생합니다.
- 적절히 처리하지 않으면 프로그램이 중단됩니다.
예시
# 오류 발생 코드
dogs.append("말티즈")
# NameError: name 'dogs' is not defined
# 해결된 코드
dogs = ["닥스훈트", "시바견"]
dogs.append("말티즈")
print(dogs)
# 출력: ['닥스훈트', '시바견', '말티즈']
3. 논리 오류 (Logical Error)
- 정의: 문법적 오류는 없지만, 프로그램의 논리가 잘못되어 예상과 다른 결과를 초래하는 오류입니다.
- 원인: 잘못된 알고리즘, 잘못된 연산 순서 등.
- 특징:
- 프로그램은 정상적으로 실행됩니다.
- 결과가 의도한 바와 다르게 나옵니다.
예시
# 논리 오류 예시
x, y = 10, 0
result = x + y # 원래는 나눗셈을 해야 하는 상황
print(f'결과는 {result}입니다.')
# 출력: 결과는 10입니다. (원래는 나눗셈 결과를 기대했음)
4. 시스템 오류 (System Error)
- 정의: 하드웨어나 운영체제 등 시스템적인 문제로 인해 발생하는 오류입니다.
- 원인: 메모리 부족, 디스크 공간 부족, 네트워크 장애 등.
- 특징:
- 프로그램 외적인 문제에서 발생합니다.
- 대부분 시스템 설정이나 하드웨어 상태를 점검해야 합니다.
5. 예외 처리 방법
- 조건문 사용: if, else 등을 통해 예외 발생 가능성을 미리 차단.
- try-except 구문: 예외가 발생할 가능성이 있는 코드를 try 블록에 작성하고, 예외 발생 시 처리할 코드를 except 블록에 작성.
- try-except-else-finally: 더 복잡한 예외 처리를 위해 else와 finally를 추가로 사용.
예시: try-except
try:
x = int(input("숫자를 입력하세요: "))
print(f"입력한 숫자는 {x}입니다.")
except ValueError:
print("숫자가 아닌 값을 입력했습니다.")
6. isdigit() 함수 설명
- 정의: 문자열이 숫자로만 이루어졌는지 판단하는 함수.
- 반환값:
- 문자열이 숫자로만 이루어져 있으면 True 반환.
- 그렇지 않으면 False 반환.
예시
print("1234".isdigit()) # 출력: True
print("1234a".isdigit()) # 출력: False
활용 예시
x, y = input("밑변과 높이를 입력해주세요: ").split()
if x.isdigit() and y.isdigit():
x, y = int(x), int(y)
print(f'삼각형의 넓이는 {x * y / 2}입니다.')
else:
print("정수로 입력하지 않아 계산이 불가합니다.")
이렇게 isdigit()을 활용하면 입력값이 숫자인지 쉽게 확인할 수 있습니다.
1. 예외 객체(Exception)
Exception을 사용하면 예외의 종류와 구체적인 이유를 알 수 있습니다.
예시 코드
try:
x, y = map(int, input("밑변과 높이를 입력해주세요").split(" "))
print(f'삼각형의 넓이는 {x * y / 2}입니다.')
except Exception as exception:
print("type(exception):", type(exception))
print("exception:", exception)
입력
3cm 5cm
출력
type(exception): <class 'ValueError'>
exception: invalid literal for int() with base 10: '3cm'
또 다른 예시
numbers = [23, 11, 7, 4, 12]
try:
number_input = int(input("찾고싶은 값의 위치를 입력해주세요"))
print(f'{number_input}번째 요소 : {numbers[number_input]}')
except Exception as exception:
print("type(exception):", type(exception))
print("exception:", exception)
입력
100
출력
type(exception): <class 'IndexError'>
exception: list index out of range
2. 예외 구분하기
try:
number_input = int(input("찾고싶은 값의 위치를 입력해주세요"))
print(f'{number_input}번째 요소 : {numbers[number_input]}')
except ValueError:
print("정수로 입력해주세요")
except IndexError:
print("리스트의 범위를 벗어났습니다. 입력값을 다시 확인해주세요")
입력
oz
출력
정수로 입력해주세요
입력
100
출력
리스트의 범위를 벗어났습니다. 입력값을 다시 확인해주세요
3. 예외 구분 구문과 예외 객체
try:
number_input = int(input("찾고싶은 값의 위치를 입력해주세요"))
print(f'{number_input}번째 요소 : {numbers[number_input]}')
except ValueError as exception:
print("정수로 입력해주세요")
print("Exception:", exception)
except IndexError as exception:
print("리스트의 범위를 벗어났습니다. 입력값을 다시 확인해주세요")
print("Exception:", exception)
4. 모든 예외처리(Exception)
try:
number_input = int(input("찾고싶은 값의 위치를 입력해주세요"))
print(f'{number_input}번째 요소 : {numbers[number_input]}')
에러를.만들꺼야
except ValueError as exception:
print("정수로 입력해주세요")
print("Exception:", exception)
except Exception as exception:
print("대처 불가한 예외가 발생했습니다.")
print("Exception:", exception)
이해도 체크리스트
- except Exception as exception: 을 사용하는 이유
- 발생한 예외를 변수로 받아서 예외의 타입과 메시지를 확인하기 위함입니다.
- Exception 객체에서 확인 가능한 주요 속성
- type(exception) : 예외의 타입을 확인합니다.
- exception : 발생한 예외의 메시지를 반환합니다.
- exception.args : 예외 메시지를 튜플 형태로 반환합니다.
- Exception 객체를 가장 효과적으로 사용할 수 있는 방법
- 디버깅: 예외 타입과 메시지를 출력하여 오류의 원인을 빠르게 파악합니다.
- 로깅: logging 모듈과 함께 사용하여 예외 발생 기록을 남깁니다.
- 사용자 친절 메시지 제공: 사용자에게 예외 원인을 명확히 안내합니다.
🔥 결론
- Exception 객체는 예외 발생 시 정확한 원인과 이유를 확인하는 데 필수적입니다.
- as 키워드와 함께 사용하여 예외 정보를 변수로 받아 다양한 처리를 할 수 있습니다.
- type(), args, str() 등을 활용해 디버깅, 유지보수, 사용자 경험 개선에 유용하게 사용할 수 있습니다.