예외처리_Python

miin·2021년 7월 26일
0

Python

목록 보기
7/10
  • 오류의 종류
    구문오류
    코드에 문제가 있어서 실행안됨
    실행 전 오류 발생
    문법적인 오류를 해결해서 해결할 수 있다
    예외
    런타임오류 라고함
    코드 자체 문법적인 오류는 없음
    실행과 관련된 문제, 실행은 되지만 오류가 나서 죽어버림
    실행 후 오류 발생
    예외처리를 통해 해결할 수 있다
  • 기본 예외 처리
    조건문을 사용하는 법과, try 구문을 사용하는 방법이 있다
  • try구문
    try:
      오류가 발생할 수 있는 구문
    except Exception as e:
     오류가 발생 했을때 실행
    else:
     오류 발생하지 않음
    finally:
     마지막에 무조건 실행

  • 오류 회피하기
    except FileNotFoundError:
    pass

  • 오류 일부러 발생시키기
    부모 클래스를 변형해서 쓸때 주로 사용함
    raise Error명
    Error명을 실행했을때 오류가 발생함

  • try
    try절이 실행되어 예외가 발생하지 않으면 except를 건너뛰는데, 예외가 발생하면 오류를 확인하며 except의 매칭되는 부분으로 넘겨준다
    try구문은 단독으로 사용할 수 없으며, 반드시 except 구문 또는 finally 구문과 함께 사용해야 한다

  • except
    오류가 발생했을 때 처리할 내용을 담는다
    (예외가 발생하지 않으면 else가 실행됨, 예외가 발생하면 finally)
    Exception 는 모든 예외의 부모, 에러이름을 모를때 주로 사용
    as 뒤에는 보통 e 를 넣거나, exception(소문자)로 많이 넣음

  • else
    try절에서 esle는 에러가 발생하지 않을때 실행하게 되는 블럭
    반드시 except 구문 뒤에 사용해야함

  • finally
    예외의 발생여부와 상관없이 무조건 실행되는 블럭, 일반적으로 리소스를 오픈한 후 이를 close() 하는 경우에 많이 사용된다
    fianlly는 필요에 따라서 사용한다(옵션)
    함수내부: return이 있을때 finally가 없으면 return 하고 그냥 빠져나가 버림
    반복문 내부: break
    file.close() 처리할때 주로 사용

  • ex)
    while True: #while을 사용하여 숫자를 입력할때 까지 오류 나지않고 무한반복 돌려주기
    try:
       print(float(input("숫자를 입력해주세요: ")) ** 2)
       break
    except:
       #에러가 나지 않게 미리 except문에 넣어놓음
       print("숫자를 입력해주세요")

  • ex)
    a = 1 + 'one'
    print('결과는', a, '입니다') #에러가 갈것같은 코드를 미리 예외처리 해줌
    ->
    try:
    a = 1 + 'one'
    except TypeError: ### 에러명을 모를때는 그냥 except만 적어주면 모든에러를 감지한다
    print('TypeError가 발생함') # 에러가 나는 코드를 실행시 멈추지않고 에러가 발생했다는 출력을 해줌

  • ex)
    class UndefinedVehicle(Exception):
    def str(self):
    return "정의되지 않은 탈것 입니다"
    vehicle = input("자전거, 오토바이, 자동차중 하나를 선택하시오>>")
    try:
    if vehicle not in ['자전거', '오토바이', '자동차']:
    raise UndefinedVehicle
    except UndefinedVehicle as e:
    print(e)
    출력-> 자전거, 오토바이, 자동차중 하나를 선택하시오>>
    정의되지 않은 탈것 입니다

  • ex)
    try:
    a = [133,5,65,77,1]
    number = int(input("정수 입력(0~4까지 입력해주세요)>"))
    print(a[number])
    except Exception as e:
    if type(e) == ValueError: #정수로 입력을 안했을 때
    print("값에 문제가 있습니다")
    elif type(e) == IndexError: #0~4까지 입력을 안했을 때
    print("0~4까지를 입력해주세요.")

-> 조건문을 except로만 사용하기

  • a = [133,5,65,77,1]
    number = int(input("정수 입력(0~4까지 입력해주세요)>"))
    print(a[number])
    except ValueError as e:
    print("값에 문제가 있습니다")
    except IndexError as e:
    print("0~4까지를 입력해주세요.")
    except Exception as e:(필수)
    #개발자에게 메일을 보내는등 의 형식으로 대응
    print("알 수 없는 예외가 발생했습니다.")
    위에서 아래로 내려오면서 조건문과 같은 효과를 줄 수 있음

0개의 댓글