Python - Exceptions

황인용·2019년 12월 12일
0

Python

목록 보기
33/44

Exceptions

Exceptions이란 '예외'라는 뜻이다.
그렇다면 파이썬에서 예외상황은 언제를 이야기 하는 걸까?
당연히 의도하지 않은 Error가 났을 경우 상황이 일어나는 경우를 일반적으로 Exceptions이 이어났다고 한다
파이썬에서 보통 Exception이 발생하면, 발생한 코드 위치에서 다음 코드들이 실행되지 않고 곧바로 프로그램이 종료를 하게 된다.

xception이 발생해도 해당 프로세스가 종료하지 않고 대신에 다른 로직을 실행하게 한 후 프로그램을 계속 실행하게 할 수 있다. 이러한 것을 exception handling이라고 한다.

Exception handling은 try except 구문을 사용해서 실행한다

# Exception handling Syntax
try:
     문장1
     문장2
     ...
     문장N    
except Exception:
     exception이 났을 경우 실행할 예외 처리코드
finally:
     Exception 여부와 상관없이 항상 마지막에 실행되는 코드

만약 element가 3개인 list에서 실수로 index를 4로 출력하면 IndexError가 나게된다. 따라서 이러한 상황에 예측하여 Exceptions을 작성한다면 다음과 같다

# Exception handling example
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
    finally:
        print("이 문장은 exception 발생 여부와 상관없이 무조건 실행됩니다!")

    return elem

return_elem_or_minus_one(1)
> 이 문장은 exception이 발생되면 실행되지 않습니다!
이 문장은 exception 발생 여부와 상관없이 무조건 실행됩니다!
2

return_elem_or_minus_one(4)
> 이 문장은 Exception이 발생하면 실행 됩니다
이 문장은 exc
![image.png](https://velog.velcdn.com/post-images%2Finyong_pang%2F71d3f730-1cd5-11ea-a106-0132c29b75fe%2Fimage.png)

![image.png](https://velog.velcdn.com/post-images%2Finyong_pang%2F71d3f730-1cd5-11ea-a106-0132c29b75fe%2Fimage.png)
eption 발생 여부와 상관없이 무조건 실행됩니다!
-1

image.png

exception 은 여러 exception을 catch 할 수 있다.
앞서 본 코드 처럼 IndexError 처럼 specific한 exception을 catch 할 수 도 있고 Exception 처럼 모든 exception을 다 catch 할 수 있다.

## Exception handling catch example
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의 객체를 받아서 정보를 더 얻을 수 있다

## Exception handling catch as else example
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이 발생하지 않았을때 실행한다

Assignment

왼쪽 상단의 divison 함수를 수정하여서 exception이 발생하는 경우 -1을 리턴하도록 해주세요.

# My Solution
def division(num1, num2):
  result = 0
  try:
    result = num1/num2
    print("이 문장은 exception이 발생하지 않으면 실행됩니다")
  except IndexError :
    print(f"이 문장은 Exception이 발생하면 실행 됩니다")
    result = -1
  except Exception as e:
    print(f"indexError가 아닌 다른 종류의 Exception이 발생했습니다 ==> {e}")
    result = -1
  finally:
    print("이 문장은 exception 발생 여부와 상관없이 무조건 실행됩니다!")

  return result
profile
dev_pang의 pang.log

0개의 댓글