2020년 5월 17일 일요일

10. Python Basic - 파이썬 에러 및 예외

학습 목표

파이썬 예외 종류
문법적 에러 발생 실습
런타임 에러 발생 실습
Try - except - else - finally

문법적으로 에러가 없지만, 실행(런타임) 프로세스에서 발생하는 예외 처리 중요
linter : 코드스타일, 문법 체크를 해주는 기능

- 1번째 에러 - Syntax Error = 잘못된 문법
- 2번째 에러 - Name Error = 참조 변수가 없을 경우
- 3번째 에러 - ZeroDivisionError = 0 나누기 에러(언어 공통으로 나타난다)
- 4번째 에러 - Index Error = 인덱스 범위가 오버된 경우에 나타난다
- 5번째 에러 - Key Error = (딕셔너리에서 자주 발생하는 에러) 없는 키값을 불러올때 나오는 에러

그래서 5번째 에러를 사전에 방지하기 위해서 Get 메소드를 활용한다.

- 6번째 에러 - Attribute Error =모듈, 클래스에 있는 잘못된 속성 사용시에 나타난다.
- 7번째 에러 - Value Error = 참조 값이 없을 때 발생
- 8번째 에러 - File Not Found Error = 외부파일을 처리할 때 발생하는 에러
- 9번째 에러 - Type Error = 이 에러를 방지하기 위해 형변환을 잘 해야한다.

항상 예외가 발생하지 않을 것으로 가정하고 먼저 코딩한 후에 예외 발생시 예외 처리 코딩 권장 ( EAFP 코딩 스타일 )

예외 처리 기본
# try - 에러가 발생할 가능성이 있는 코드 실행
# except - 에러명1
# except - 에러명2
# else - 에러가 발생하지 않았을 경우 실행
# finally - 항상 실행

예외 처리 예01
name = ['Kim','Lee''Park']
try:
    z = 'Kim'
    x = name.index(z)
    print("{} Found it! in name".format(z, x+1))
except ValueError:
    print("Not fount it! - Occured ValueError!")
else:
    print("Ok! else")

어떤 오류가 발생할지 모를 경우 except만 적는다.
name = ['Kim''Lee''Park']
try:
    z = 'J'
    x = name.index(z)
    print("{} Found it! in name".format(z,x+1))
except:
    print("Not found it! - Occured Error!")
else:
    print("Ok! else")

[Finally]의 명령어는 실행의 여부와 관련없이 실행이 되는 코드이다.
try:
    z = 'Kim'
    x = name.index(z)
    print('{} Found it! in name'.format(z,x+1))
except:
    print("Not found it! - Occurred Error!")
else:
    print("Ok! else!")
finally:
    print("Finally ok!")

예외 처리(else)는 하지 않지만, 무조건 실행되는 코드의 패턴임으로 숙지해 놓는다.
try:
    print("try")
finally:
    print("Ok Finally!")

다중 예외처리의 코드 작성 방법은 다음과 같다. 그러나 코드작성시 코드의 순서를 감안하고 작성을 해야한다.
try:
    z = "Kim"
    x = name.index(z)
    print("{} Found it! in name".format(z, x+1))
except ValueError:
    print("Not fount it! - ValueError Error!")
except IndexError:
    print("Not found it! = IndexError Error!")
except Exception:
    print("Not found it! = Occurred Error!")
else:
    print("Ok! else!")
finally:
    print("finally ok!")

직접 예외를 설정할시 코드는 다음과 같이 작성된다. (고급문법)
try:
    a = '333'
    if a == 'Kim':
        print('Ok 허가!')
    else:
        raise ValueError
except ValueError:
    print('문제 발생!')
except Exception as f:
    print(f)
else:
    print('Ok!')

댓글 없음:

댓글 쓰기