if ~ else ~
try ~ except ~
조건문, 예외처리 는 비슷한 점이 많지만
정확히 알고 있다면 생각보다 적합한 순간에 큰 도움을 주는 것들이다
흔히 사용하는 조건문의 사용방법은 매우 간단하다
if True:
# 실행할 내용
else:
# 위에 조건이 True가 아닐때 실행할 내용
기본적으로는 if
다음에 오는 내용이 참일 때 아래 내용이 실행되고
거짓일때 else
아래 내용이 실행된다
조건이 여러가지일 때는 elif
를 사용할 수 있다.
if True:
# 조건이 참일때 실행할 내용
elif False:
# 조건이 거짓일때 실행할 내용
else:
# 위 내용이 전부 만족하지 않을 때 실행할내용
elif 를 여러번 사용할 수 있다.
if
, elif
안에 있는 내용이 True False 중 하나를 만족하면 좋겠지만
오류가 나는 경우 아랫줄이 실행되지 못하고 빠져나와 오류를 알려준다
예상치 못한 오류라면 너무 고마운 상황이지만 예상가능한 오류지만 어떤 오류인지
오류 상황에서 추가 동작을 지시하고 싶을때 try ~ except ~
를 사용해주면 된다
지시한 내용을 실행하다 오류가 나는경우 전체적으로 멈추는 것이 아니라
예외처리를 하고 다음줄로 넘기려고 하는 상황에서 사용가능하다
a = ['1' ,'2', 'a', '3']
for i in a:
print(int(i))
print("pass")
a 리스트엔 스트링 타입 데이터 4개가 있다
이 데이터들을 int 화 시켜 출력시키고 싶은 상황인데
중간 'a'
는 int화가 불가능한 데이터기 때문에 invalid literal 오류를 발생시킨다
따라서 오류 메세지를 보이고 나가버리고 아래 print("pass")
는 실행되지 못한다.
프로그래밍을 하다보면 발생할 오류가 예측 가능하고
일단은 예외로 두고 나머지 코드들이 실행되도록 해야할 상황이 있는데
a = ['1' ,'2', 'a', '3']
try:
for i in a:
print(int(i))
except:
print("error")
print("pass")
try ~ except ~
를 사용해주면
1
2
error
pass
중간에 에러가 있더라도 코드 마지막줄까지 실행시켜준다
하지만 발생한 오류는 꼭 알고 있어야하고
결국 따로 처리를 해줘야한다는 사실을 잊지 말자
try:
a = ["a", "b"]
third = a[3]
except IndexError:
print("error")
print("pass")
except
다음엔 발생할 오류를 예측해 오류 종류에 따른 코드를 실행시켜줄 수 있다.
위 상황은 흔히 볼 수 있는 인덱스 오류인데 a 리스트에 3번째 인자가 없는데 호풀했기 때문에 인덱스에러가 발생했다.
이 경우 인덱스 에러가 아닌 에러가 발생하면 아랫줄을 실행하지 못하고 중지된다.
try:
a = ["a", "b"]
third = a[3]
except IndexError as e:
print(e)
에러에 대한 메세지를 위와 같이 출력도 가능하다
list index out of range
다음과 같이 인덱스에러에 관한 메세지를 출력하기 때문에
디버깅할때 유리하다
try:
a = ["a", "b"]
third = a[3]
except IndexError:
print("error")
except AssertionError:
print("other error")
print("pass")
위처럼 한개 이상의 오류를 다룰 수 있다
파이썬에서 발생하는 오류의 종류는
Python docs 에서 확인 가능하다.
try:
a = ["a", "b"]
third = a[3]
except IndexError:
print("error")
finally:
print("pass")
finally
를 통해 Try
가 실행되든 except
가 실행되든 마지막에 실행될 코드를 넣을 수 있다
print("pass")
는 결국 마지막에 실행된다.