Python TIL(10) - Exceptions Handling

random·2021년 4월 4일
0

Python - TIL

목록 보기
10/19

파이썬의 오류와 예외처리 기능 학습

프로개발자라면 충분히 숙달 되어야 할 오류, 예외처리를 탐구해보자

기본개념

  • 예외란?: 문장이나 표현식이 문법적으로 올바르다 할지라도, 실행하려고 하면 본인은 예상치 못한 에러가 일어날 수 있다. 실행 중에 감지되는 에러들을 예외 라고 부르며 문법 오류(예: Syntax Error) 만큼 치명적이지는 않다.

  • 예외처리란?: 완성도 높은 프로그램을 만들기 위한 목적으로, 프로그래밍시 필연적으로 마주하게 되는 예외를 무시하거나 적절히 조치하기 위한 처리 방법을 일컬음.

  • 예외의 원인은?: 예외의 문제는 보통 다음과 같은 데에서 비롯한다.

    • 컴퓨터 하드웨어 문제
    • 운영 체제의 설정 실수
    • 라이브러리 손상
    • 사용자의 입력 실수
    • 존재하지 않는 파일 이름 입력
    • 숫자값 입력 칸에 일반 문자 입력
    • 받아들일 수 없는 연산
    • 할당하지 못하는 기억 장치 접근
    • 페이지 실패 등

파이썬에서의 예외처리 종류

  • (1) try: 프로그래머가 작성한 실행하고픈 코드 블록 (때에 따라서 오류가 발생할 수도 있음)
  • (2) except: 위 try 문에서 에러가 발생하게 된다면 실행될 코드블록
  • (3) else: try 문이 정상 작동하여 except문을 건너뛰고 실행되는 코드블록
  • (4) finally: 위 코드에서 에러발생 여부와 상관 없이 무조건 실행되는 코드블록

| 참고 | try 안에서 만든 변수는 try 바깥에서 사용할 수 있을까?
=> try는 함수가 아니므로 스택 프레임을 만들지 않음. 따라서 try 안에서 변수를 만들더라도 try 바깥에서 가용함. 이는 except, else, finally에도 똑같이 적용됨.


코드예제를 통한 학습

<1번 예제>

try:
    result = 10 + 10
except: 
    print("Hey it looks like you aren't adding correctly") 
    # 에러나는 코드를 실행하면 터미널에 뜨는 에러메세지
else:
    print("Add went well!") # 올바르게 실행하면 뜰 성공 메세지
    print(result)

<2번 예제>

try:
    f = open('testfile', 'w')
    f.write("Write a test line")
except TypeError: 
#이러한 빈도수가 높은 빌트인 에러들 PEP8 참고하면서 다양하게 숙지하자!
    print("There was a type error!")
except OSError:   
#권한이 없는 파일을 열거나 쓰려고 할 때 나는 에러. 
    print('Hey you have an OS Error')
finally:  
#코드가 성공적으로 실행되던 에러가 뜨던 무조건 실행되는 코드 
    print("I always run")

<3번 예제>

def ask_for_int():
    try:
        result = int(input("Please provide number: "))
    except:
        print("Whoops! That is not a number")
    finally:
        print("End of try/except/finally")

<4번 예제>

def ask_for_int():

    while True:
        try:
            result = int(input("Please provide number: "))
        except:
            print("Whoops! That is not a number")  
            #integer로 변환 시킬 수 없는 값을 넣으면 뜨는 에러메세지
            continue
        else:
            print("Yes, thank you") 
            # 앞에서 에러가 뜬 후 정상적인 값을 입력하면 본 else 메세지... 
            # 와 Finally가 동시에 뜨며 함수 종료
            break
        finally:
            print("End of try/except/finally")
            print("I(finally) will always run no matter what")

0개의 댓글