TIL - 20/04/01

Magit·2020년 4월 1일
0

TIL

목록 보기
10/16
post-custom-banner

분산된 개념들 일단 써놓기

git push origin master
# origin 이라는 원격저장소에 로컬저장소의 master를 업로드한다.
git push origin <branch_name>
$touch lgr.txt
# lgr.txt 라는 텍스트파일을 생성한다.
$vim lgr.txt
# vim을 이용해서 lgr.txt 를 수정한다.

Python

Exceptions

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>()

Exception이 발생하면, 발생한 코드 위치에서 다음 코드들이 실행되지 않고 곧바로 프로그램이 종료하게 된다. 하지만 exception이 발생해도 해당 프로세스가 종료하지 않고 대신에 다른 로직을 실행하게 한 후 프로그램을 계속 실행하게 할 수 있습니다. 이러한 것을 `exception handling` 이라고 합니다.

예를 들어, 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
profile
이제 막 배우기 시작한 개발자입니다.
post-custom-banner

0개의 댓글