git push origin master
# origin 이라는 원격저장소에 로컬저장소의 master를 업로드한다.
git push origin <branch_name>
$touch lgr.txt
# lgr.txt 라는 텍스트파일을 생성한다.
$vim lgr.txt
# vim을 이용해서 lgr.txt 를 수정한다.
Exception이란 영어 단어는 한국어로 예외라는 뜻이다. 그렇다면 파이썬에서 예외상황은 언제를 이야기 할까?
당연히 의도하지 않은 에러가 일어나는 경우를 예외 상황이라고 할 수 있다.
이러한 예외사항이 일어나는 경우를 일반적으로 exception이라고 한다.
short_list = [1, 2, 3]
# 총 요소의 수가 3개인 list인데, 만일 실수로 4번째 요소를 indexing 하면 IndexError가 나게된다.
fourth_element = short_list[3]
>
IndexError Traceback (most recent call last)
<ipython-input-2-54d383a36828> in <module>()
예를 들어, user가 잘못된 값을 input으로 입력해서 exception이 일어났다고 해도, 종료하지 말고 유저에게 메세지를 리턴하도록 할 수 있는 것입니다. Exception handling은 try except 구문을 사용해서 실행합니다.
try:
문장1
문장2
...
문장N
except Exception:
exception이 났을 경우 실행할 예외 처리코드
finally:
Exception 여부와 상관없이 항상 마지막에 실행되는 코드
예를 들어, 앞서 보았단 코드 예제의 경우 만일 IndexError가 났을 경우 프로그램을 종료하는 대신 에러 메세지를 출력하고 -1을 리턴하기 위해서는 다음처럼할 수 있습니다.
Exception 은 여러 exception을 catch 할 수 있습니다.
앞서 본 코드 처럼 IndexError 처럼 specific한 exception을 catch 할 수 도 있고 Exception 처럼 모든 exception을 다 catch 할 수 있습니다.
def return_elem_or_minus_one(index):
short_list = [1, 2, 3]
elem = 0
try:
elem = short_list[index]
print("이 문장은 exception이 발생되면 실행되지 않습니다!")
except IndexError:
print(f"이 문장은 Exception이 발생하면 실행 됩니다")
elem = -1
except Exception:
print(f"IndexError가 아닌 다른 종류의 Exception이 발생했습니다")
elem = -1
finally:
print("이 문장은 exception 발생 여부와 상관없이 무조건 실행됩니다!")
return elem
또한 Exception을 catch할때 "as" 문을 써서 해당 exception의 객체를 받아서 정보를 더 얻을 수 있습니다.
def return_elem_or_minus_one(index):
short_list = [1, 2, 3]
elem = 0
try:
elem = short_list[index]
print("이 문장은 exception이 발생하지 않으면 실행됩니다")
except IndexError:
print(f"이 문장은 Exception이 발생하면 실행 됩니다")
elem = -1
except Exception as e:
print(f"IndexError가 아닌 다른 종류의 Exception이 발생했습니다 ==> {e}")
elem = -1
finally:
print("이 문장은 exception 발생 여부와 상관없이 무조건 실행됩니다!")
return elem
마지막으로 try 문에서도 else를 사용할 수 있습니다. Else 문은 exception이 발생하지 않았을때 실행됩니다.
def return_elem_or_minus_one(index):
short_list = [1, 2, 3]
elem = 0
try:
elem = short_list[index]
print("이 문장은 exception이 발생하지 않으면 실행됩니다")
except IndexError:
print(f"이 문장은 Exception이 발생하면 실행 됩니다")
elem = -1
except Exception as e:
print(f"IndexError가 아닌 다른 종류의 Exception이 발생했습니다 ==> {e}")
elem = -1
else:
print(f"Exception이 발생하지 않았습니다!")
finally:
print("이 문장은 exception 발생 여부와 상관없이 무조건 실행됩니다!")
return elem
Assignment
왼쪽 상단의 divison 함수를 수정하여서 exception이 발생하는 경우 -1을 리턴하도록 해주세요.
# My Solution
def division(num1, num2):
answer = 0
try:
answer = num1 / num2
print("이 문장은 exception이 발생하지 않으면 실행된다.")
except IndexError:
print("이 문장은 exception이 발생하면 실행된다.")
answer = -1
except Exception as e:
print(f"IndexError가 아닌 다른 종류의 Exception이 발생했습니다 ==> {e}")
answer = -1
else:
print("Exception이 발생하지 않았습니다.")
finally:
print("이 문장은 exception 발생 여부와 상관없이 무조건 실행됩니다!")
return answer