Error의 종류
# Syntax Error 문법 에러
for i in range(10)
print(i)
# Name Error 이름 에러
print(x)
# Type Error 타입 에러
x = 10
y = '20'
print(x + y)
# Index Error 인덱스 에러
my_list = [1, 2, 3]
print(my_list[3])
# Key Error 키 에러
my_dict = {'a': 1, 'b': 2}
print(my_dict['c'])
# Value Error 값 에러
int('a')
# ZeroDivision Error 0 나누기 에러
x = 10
y = 0
print(x / y)
# Attribute Error 어트리뷰트 에러 : 객체에 존재하지 않는 속성이나 메서드 호출
my_list = [1, 2, 3]
print(my_list.appeend(4))
# Type Error 인자 개수 에러
def add(x, y):
return x + y
add(1, 2, 3)
# File I/O Error 파일 입/출력 에러
f = open('non-existent.txt', 'r')
f.read()
예외 처리
try except 사용
try:
# 예외가 발생할 가능성이 있는 코드
except:
# 예외 처리 코드
try:
# 예외가 발생할 가능성이 있는 코드
except 애러명:
# 애러명 예외 처리 코드
try:
할인율 = 0
치킨값 = 30000 / 할인율
print('치킨주문 되었습니다.')
except:
print('결제가 안되었습니다!')
# 결제가 안되었습니다!
else 문
에러 없이 실행되면 else를 실행. while, for 에 else와 비슷함.
try:
할인율 = 0
# 치킨값 = 30000 / 할인율
print('치킨주문 되었습니다.')
except:
print('결제가 안되었습니다!')
else: # 에러 없이 실행되면 else를 실행합니다. while, for + else 조합과 비슷합니다.
print('else')
# 치킨 주문 되었습니다.
# else
finally
무조건 실행
try:
할인율 = 0
치킨값 = 30000 / 할인율
print('치킨주문 되었습니다.')
except:
print('결제가 안되었습니다!')
finally: # 무조건 실행
print('메인화면으로 이동')
# 결제가 안되었습니다!
# 메인화면으로 이동
에러 발생시키기
assert
test = 'hello'
assert test == 'hello', '에러 메시지 1'
assert test == 'world', '에러 메시지 2'
assert test + 3 == 5, '에러 메시지 3'
# AssertionError: 에러 메시지 2
raise
x = 10
raise ValueError('코드를 잘~~ 만들어주세요')
y = 20
# ValueError: 코드를 잘~~ 만들어주세요
에러 직접 만들기
class MyError(Exception): #Exception을 상속받음
def __init__(self):
super().__init__('내가 만든 에러')
raise MyError
# MyError: 내가 만든 에러
로깅
import logging
logging.basicConfig(level=logging.warning) # 어느 레벨부터 로깅할지, 기본으로 warning 부터 로깅
logging.debug("This is a debug message") # 고쳐야 할 코드, 기록 필요
logging.info("This is an info message") # 정보성 메시지
logging.warning("This is a warning message") # 경고 메시지
logging.error("This is an error message") # 애러 메시지(프로그램은 동작)
logging.critical("This is a critical message") # 프로그램 중지(애러처리 안된경우)
# WARNING:root:This is a warning message
# ERROR:root:This is an error message
# CRITICAL:root:This is a critical message
아래는 너무 알게 많으니까 일단 이런게 있구나 알아만 두자... 일일히 이해하는건 나중에..
import logging.handlers
def logger():
log_obj = logging.getLogger("log_name") # log name으로 log 객체 생성
log_obj.setLevel(logging.DEBUG) # 어디부터 기록할지 설정
# fileHandeler = logging.FileHandler(filename="./test.txt") # 파일로 기록
streamHandler = logging.StreamHandler() # 콘솔에 출력
fileHandeler.setLevel(logging.INFO) # 파일 기록 레벨 설정
# streamHandler.setLevel(logging.DEBUG) # 콘솔 기록 레벨 설정
formatter = logging.Formatter("%(name)s, %(asctime)s, %(levelname)s, %(message)s") #포멧 생성
fileHandeler.setFormatter(formatter) # 파일 메시지 포멧 설정
# streamHandler.setFormatter(formatter) # 콘솔 메시지 포멧 설정
log_obj.addHandler(fileHandeler) # log_obj handler에 파일 출력 방식 추가
# log_obj.addHandler(streamHandler) # log_obj handler에 파일 콘솔 방식 추가
return log_obj
log = logger()
# 아래 코드를 기록하고 싶은 곳에 함께 설정
log.debug('debug')
log.info('info')
log.warning('warning')
log.error('error')
log.critical('critical')
print('---')
# 아래와 같이 사용
def f():
try:
x = 1 / 0
except Exception as e:
print(e)
log.error(f'{e} error')
f()
'Python' 카테고리의 다른 글
Python(17) args, kwargs, 이터레이터와 제너레이터 (1) | 2023.09.20 |
---|---|
Python(16) 일급 함수와 고차 함수, 클로저, 데코레이터 (0) | 2023.09.20 |
Python(14) 모듈 (0) | 2023.09.19 |
Python(13) 클래스 심화 (1) | 2023.09.19 |
Python(12) 클래스 (0) | 2023.09.17 |