본문 바로가기
Python

python 간단 정리 - (14)

by shinbian11 2020. 3. 3.

이 파일은 제가 python 기초 강의를 들으면서 필기했던 내용들을 간단하게 정리한 것입니다.

 

혹시나 잘못된 정보가 포함되어있을수도 있기 때문에, 

python 내용을 아시는 분들중에 잘못된 내용을 잡아내신 경우에는 댓글을 달아주시길 바랍니다.

 

-----------------------------------------------------------------------------------------------------

저는 이미 c언어를 공부한 이후에 파이썬을 공부하고 있는 터라, 필기 내용 자체가 아무래도 c언어와 파이썬의

차이점을 위주로 정리를 했습니다. 그렇기 때문에 python을 아예 모르시는 분은 이 문서를 읽기에 약간 불편함이 

있을수도 있다는 점 양해바랍니다. c언어를 어느정도 알고 이 문서를 보는걸 추천드립니다 ㅎㅎ

저도 아직 초보라 틀린 내용이 있을수 있고, 만약 그 부분을 잡아내신다면 댓글로 알려주시길 바랍니다.


<< try~except 예외처리 >>

 

=> 코딩 중에 여러가지 이유로 발생할 수 있는 많은 에러들을 유연하게 다루고, 그 예외상황을 파악하게 하는 방법

=> 에러가 발생했을때 프로그램을 멈추게 하지 않고 별도 처리를 가능하게 하는 방법 

 

 

<구조>

try:

    에러가 발생할 가능성이 있는 코드

except 에러종류:

    에러가 발생했을 경우 처리할 코드


<try~ except 사용하는 예시>

 

ex1)

text = '100%'
try:
    number = int(text)
except ValueError:
    print('{}는 숫자가 아니네요.'.format(text)) # 100%는 숫자가 아니네요.

ex2)

try:
    a = 3/0
except ZeroDivisionError:
    print("0으로 나눌수 없다.")  #0으로 나눌수 없다.

->물론 try~except 대신 if ~ else를 사용할수도 있다.

 

ex)

list = [1,2,3,4]
idx = 5    #list에서 인덱스가 5인 원소는 없다. 즉 IndexError가 일어날 것이다!
 
try:
    print(list.pop(idx))  #idx에 해당하는 list의 값을 출력!
except IndexError:
    print('{} index의 값을 가져올 수 없습니다.'.format(idx)) #IndexError가 생기면 출력할 문장!

>> 이 코드를 if~else문으로 바꾸면,

 

list = [1,2,3,4]
idx = 5    #list에서 인덱스가 5인 원소는 없다. 즉 IndexError가 일어날 것이다!
 
if idx < len(list):
    print(list.pop(idx))
else:
    print('{} index의 값을 가져올 수 없습니다.'.format(idx))

>> 이것도 같은 결과가 나온다.


<<예외(에러)의 이름을 모를땐...?>>

 

==> except 뒤에 아무런 이름도 안 적어주면 됨!

 

 

try:

    에러가 발생할 가능성이 있는 코드

except:

    에러가 발생했을 경우 처리할 코드


<어디에서 에러가 발생했는지 모를땐...? (에러의 내용, 정보를 알고싶을땐?) >

 

>> except 뒤에 Exception as ex: 라고 쓰면 됨! 

(물론 이때의 ex는 발생한 에러의 이름을 받아오는 '변수'이다.)

try:
    list = []
    print(list[0])
 
except Exception as ex:  # 에러 종류
    print('어떤 에러가 발생했나요?', ex)  # ex는 발생한 에러의 이름을 받아오는 '변수'
    # 어떤 에러가 발생했나요? list index out of range

출력결과 >> 어떤 에러가 발생했나요? list index out of range


<< raise >> 

 

=> 사용자가 에러를 직접 일으키는 방법!

 

try:

    ...

    raise 에러종류   #에러를 발생시킬 위치

    ...

exception 에러종류:

    처리할 코드

 

 

 

=> <주로 사용하는 경우>

 

1. 입력을 이상한것을 입력했을때

2. 중첩된 for문을 한번에 종료시킬때

3. 나머지 다양한 여러 경우~~~


ex1) 입력을 이상한것을 입력했을때

def name(me, you):
    list = ['홍길동','김첨지']  #홍길동, 김첨지 외 다른 문자열이 들어오면 ValueError를 발생시킴!
    if me not in list:
        raise ValueError
    if you not in list:
        raise ValueError
 
try:
    name('홍길동', '박첨지')
except ValueError:
    print('잘못된 값이 들어왔다!')

ex2) 중첩된 for문을 한번에 종료시킬때

list = [[1,3,5,7],[10,13,16,19]]
num = 17
try:
    for idx,values in enumerate(list):
        for value in values:
            if value > num:
                print('{}번째 인덱스 리스트에 {}을 넘는 원소가 있습니다.'.format(idx, num))
                print('그것은 바로 {}입니다.'.format(value))
                raise StopIteration   # 예외발생시킴으로써 한번에 for 반복문 두개를 탈출해 나온다
 
 
except StopIteration:
    print('정상종료..')

 

>> raise의 단점: 많이 사용하면 코드를 읽기 어려워진다..

'Python' 카테고리의 다른 글

python 간단 정리 - (16)  (0) 2020.03.07
python 간단 정리 - (15)  (0) 2020.03.06
python 간단 정리 - (13)  (0) 2020.03.02
python 간단 정리 - (12)  (0) 2020.02.28
python 간단 정리 - (11)  (0) 2020.02.25