Python뿐 아니라 어떤 프로그래밍 언어로 짜더라도 '오류 처리'는 중요하다.
개발자가 예측하지 못한 사용자의 행동, 프로그램의 로직상 문제점 등을 예외 처리
를 해서 프로그램이 중단되는 일이 없도록 해야 한다.
프로그램을 무책임하게 짜서 try exception
을 엄청 많이 여기저기 쓰면 나중에는 프로그램 최종 결과가 어떻게 됐는지, 왜 이렇게 나오는지 모르는 상황이 발생할 수 있다.
개발 과정에서 오류가 생길 수 있는 요소들을 최대한 배제하고 대비한 후, 그러고 나서 그 외에 발생할 특별한 경우에 try except문을 쓴다. 그런 부분까지 처리할 때 완벽한 프로그램을 만들 수 있다. 반드시 숙지하기!
# value 에러
try:
val = "10.5"
n = int(val)
except ValueError as e: # value 에러가 발생할 것 같다고 추측할 경우
print("다음과 같은 오류 발생 : {}".format(e))
# 다음과 같은 오류 발생 : invalid literal for int() with base 10: '10.5'
# index 에러
try:
idx = []
idx[0] = 100 # 인덱스 에러
except IndexError as e:
print("다음과 같은 오류 발생 : {}".format(e))
# 다음과 같은 오류 발생 : list assignment index out of range
# Exception 더 많이 쓴다. 예상되는 에러를 특정하지 않을 때.
try:
idx = []
idx[0] = 100
except Exception as e: # as는 별명
print("다음과 같은 오류 발생 : {}".format(e))
try:
idx = []
idx[0] = 100 # 인덱스 에러
except:
pass
print("done")
# done
주의
pass식 예외처리를 남발하면 '어디서 어떻게 안 되는지'를 파악할 수 없게 된다. (위는 약간 무책임한 상황) 개발자는 프로그래밍 할 때 최대한 오류가 없도록 핸들링 한 상태에서 개발해야 한다.
try - except - else
try:
n = "10"
v = int(n)
except:
print("오류 발생")
else:
print("정상 동작 확인")
try
문에서 오류 의심 처리를 하고, 오류가 발생하면 except
에 걸린다.
오류 없이 정상 작동하면 else
문이 찍힌다.
finally
# finally는 오류가 발생하든 안 하든 실행된다.
try:
file = open("sample.txt", "r") # r모드로 읽기. 파일 open된 상태에서
n = "10.5" # 여기서 오류 발생
v = int(n)
except:
print("오류 발생")
finally: # 파일은 열린 상태인데, 오류 발생과 무관하게 호출하는 finally문에서
file.close() # 파일 닫는 코드를 실행할 수 있다.
print("파이널리 호출")