예외란?: 문장이나 표현식이 문법적으로 올바르다 할지라도, 실행하려고 하면 본인은 예상치 못한 에러가 일어날 수 있다. 실행 중에 감지되는 에러들을 예외 라고 부르며 문법 오류(예: Syntax Error) 만큼 치명적이지는 않다.
예외처리란?: 완성도 높은 프로그램을 만들기 위한 목적으로, 프로그래밍시 필연적으로 마주하게 되는 예외를 무시하거나 적절히 조치하기 위한 처리 방법을 일컬음.
예외의 원인은?: 예외의 문제는 보통 다음과 같은 데에서 비롯한다.
| 참고 | try 안에서 만든 변수는 try 바깥에서 사용할 수 있을까?
=> try는 함수가 아니므로 스택 프레임을 만들지 않음. 따라서 try 안에서 변수를 만들더라도 try 바깥에서 가용함. 이는 except, else, finally에도 똑같이 적용됨.
<1번 예제>
try:
result = 10 + 10
except:
print("Hey it looks like you aren't adding correctly")
# 에러나는 코드를 실행하면 터미널에 뜨는 에러메세지
else:
print("Add went well!") # 올바르게 실행하면 뜰 성공 메세지
print(result)
<2번 예제>
try:
f = open('testfile', 'w')
f.write("Write a test line")
except TypeError:
#이러한 빈도수가 높은 빌트인 에러들 PEP8 참고하면서 다양하게 숙지하자!
print("There was a type error!")
except OSError:
#권한이 없는 파일을 열거나 쓰려고 할 때 나는 에러.
print('Hey you have an OS Error')
finally:
#코드가 성공적으로 실행되던 에러가 뜨던 무조건 실행되는 코드
print("I always run")
<3번 예제>
def ask_for_int():
try:
result = int(input("Please provide number: "))
except:
print("Whoops! That is not a number")
finally:
print("End of try/except/finally")
<4번 예제>
def ask_for_int():
while True:
try:
result = int(input("Please provide number: "))
except:
print("Whoops! That is not a number")
#integer로 변환 시킬 수 없는 값을 넣으면 뜨는 에러메세지
continue
else:
print("Yes, thank you")
# 앞에서 에러가 뜬 후 정상적인 값을 입력하면 본 else 메세지...
# 와 Finally가 동시에 뜨며 함수 종료
break
finally:
print("End of try/except/finally")
print("I(finally) will always run no matter what")