프로그램을 사용할 때 일어나는 오류들
크게 예상 가능한 예외와 예상 불가능한 예외로 나뉜다.
예상 가능한 예외 : 사용자의 잘못된 입력 등 발생 여부를 사전에 인지할 수 있는 예외
- if문 등을 이용하여 개발자가 반드시 명시적으로 정의해야 한다.
예상 불가능한 예외 : 개발자의 실수, 잘못된 데이터 등으로 인터프리터 과정에서 발생하는 예외
- 인터프리터가 자동으로 에러를 호출하고 프로그램을 중지/종료한다.
try:
# 예외가 발생할 수 있는 코드 (필수)
except <Exception Type> as e:
# 예외 발생시 실행되는 코드 (필수)
# as e를 통해 에러의 정보를 인자로 받아 사용할 수 있다.
else:
# 예외가 발생하지 않고 try가 모두 끝났을 때 동작하는 코드 (선택)
finally:
# 예외 발생여부와 상관없이 실행되는 코드 (선택)
EOFError
: input()
으로 파일을 읽어올 때, 파일의 끝(EOF)에 도달하여 아무것도 읽어올 수 없을 때 발생(raise)하는 에러IndexError
: sequence 데이터의 Index 범위를 넘어 호출했을 때 발생하는 에러KeyError
: 딕셔너리에 존재하지 않는 키를 호출했을 때 발생하는 에러NameError
: 정의되지 않은 변수를 호출할 때 발생하는 에러RecursionError
: 재귀 깊이가 설정된 값을 넘었을 때 발생하는 에러 (sys.setrecursionlimit(limit)
를 통해 재귀 깊이 설정 가능)ZeroDivisionError
: 0으로 나누었을 때 발생하는 에러ValueError
: int("c")
와 같이 변환할 수 없는 문자/숫자를 변환할 때 발생하는 에러예외처리로 if 문법을 쓸지, except 문법을 쓸지는 동료 간 의사소통하여 결정하는 것이 좋다.
while True:
value = input("비밀번호를 입력해주세요")
for digit in value:
if digit not in "0123456789":
raise ValueError("숫자 외의 값을 입력하셨습니다.")
else:
pass # 실행될 코드
assert (조건문)
으로 사용하며, 조건문의 결과가 False일 경우 AssertError를 발생시킨다.open
키워드를 통해 파일을 처리할 수 있다.f = open("file.txt", "r") # (파일명, 접근 모드)
contents = f.read() #파일을 불러와 contents 변수에 저장
print(contents)
f.close
f.readlines
: 파일을 \n을 기준으로 잘라서 리스트 형태로 저장한다. 파일의 모든 line이 한꺼번에 메모리에 올라간다.f.readline
: 파일을 \n을 기준으로 한 줄씩 읽어온다. 전체 파일 용량이 너무 커서 메모리에 담을 수 없을 때 주로 사용한다.f = open("sample.txt", "w", encoding="utf8")
for i in range(1,11):
data = "%d번째\n" % i
f.write(data)
f.close()
mkdir()
와 같은 함수를 사용해서 디렉토리 생성이 가능isdir()
또는 exists()
함수를 사용해서 확인할 수 있다.import pathlib
cwd = pathlib.Path.cwd() # cwd = current working directory
print(cwd)
# D:\coding\boostcourse
print(list(cwd.parents))
print(list(cwd.glob("*")))
cwd()
: 현재 스크립트를 실행한 디렉토리 경로parent()
: cwd의 부모 경로parents()
: cwd의 모든 부모 경로glob()
: 현재 디렉토리에 있는 다른 디렉토리와 파일 목록을 필터링하여 검색할 수 있다.import pickle
f = open("list.pickle", "wb") # 1
test = [테스트]
pickle.dump(test, f) # 2
f.close
del test # 테스트 리스트를 지운다.
f = open("list.pickle", "rb")
test_pickle = pickle.load(f) # 3
print(test_pickle) # [테스트]
f.close()
f = open("list.pickle", "wb")
: wb는 write+binary를 의미한다. 바이너리 파일 쓰기 모드로 파일을 열겠다는 뜻.pickle.dump(test, f)
: test 리스트를 list.pickle 파일에 저장한다.pickle.load(f)
: pickle 파일을 불러온다.logging.basicConfig(level=logging.[레벨])
을 통해 출력할 레벨을 설정할 수 있다.import logging
if __name__=="__main__":
logger = logging.getLogger("main") # 1
logging.basicConfig(level=logging.INFO) # info부터 로깅
steam_handler = logging.FileHandler( # 2
"my_log", mode="w", encoding="utf8"
)
logger.addHandler(steam_handler)
logger.debug("DEBUG")
logger.info("INFO")
logger.warning("WARNING!")
logger.error("ERROR!!!")
logger.critical("CRITICAL!!!!!")
#INFO:main:INFO
#WARNING:main:WARNING!
#ERROR:main:ERROR!!!
#CRITICAL:main:CRITICAL!!!!!
import logging
formatter = logging.Formatter('%(asctime)s %(levelname)s %(process)d')
# 2022-12-24 21:03:05, 458 ERROR 4439 -> 이런 식이다.