3-1/Python

14주차-Exception

Donghun Kang 2024. 6. 11. 16:29
  • 오류(error)
프로그램이 정상적으로 동작하지 않는 현상
  • 구문오류(syntax error): '파싱에러'라고도 함.
  • 런타임 오류(run-time error): exception
  • 논리오류(logic error): exception
  • 구문오류(syntax error)
- 프로그램 규칙(문법)이 잘못된 것
- 동작도 못해보고 바로 error가 나서 실행이 안됨

 

EX)

while True
    print("Hello")

":"가 없어서 ERROR가 나타남

 

  • 예외(Exception)
- 프로그램 언어 규칙(문법)은 맞음 => 실행 O
- 실행 도중에 잘못된 입력값이 들어오거나 비정상 종료

 

EX)

a = 5/0

문법은 맞지만 어떤 숫자를 0으로 나누는 것은 존재하지 않음.

  • 예외처리

- try 안 코드가 실행되다가 예외가 발생하면 except에서 처리하는 것.
- 예외가 발생안하면? 그냥 통과

 

EX)

try:
    x = int(input("나눌 숫자를 입력하세요: "))
    y = 10/x
    print(y)
except:
    print("예외가 발생했습니다.")

 

  • 특정 예외만 처리하기
except에 예외 이름을 지정해서 특정 예외가 발생했을 때만 처리 코드를 실행

 

EX)

try:
    x = int(input("나눌 숫자를 입력하세요: "))
    y = 10/x
    print(y)
except ZeroDivisionError:
    print("0으로 나눌 수 없습니다.")
except ValueError:
    print("숫자를 넣으세요.")

 

  • 예외의 에러 메시지 받아오기
except에서 as뒤에 변수를 지정하여 발생한 예외의 에러 메시지를 받아온다.

 

EX)

try:
    x = int(input("나눌 숫자를 입력하세요: "))
    y = 10/x
    print(y)
except ZeroDivisionError as e:
    print("0으로 나눌 수 없습니다.",e)
except ValueError as e:
    print("숫자를 넣으세요.",e)

모든 예외의 에러 메시지 받아오기
=> except에 Exception을 지정하고 as뒤에 변수를 넣는다.

 

  • 다중 예외 처리 구조
예외가 발생하지 않을 때 코드를 실행하려면 else사용

 

EX)

try:
    x = int(input("나눌 숫자를 입력하세요: "))
    y = 10/x
except Exception as e:
    print("예외가 발생했습니다.",e)
else:
    print(y)

 

예외 발생 여부와 상관없이 항상 코드를 실행하는 "finally"

 

EX)

try:
    x = int(input("나눌 숫자를 입력하세요: "))
    y = 10/x
except Exception as e:
    print("예외가 발생했습니다.",e)
else:
    print(y)
finally:
    print("코드 실행 종료")

 

  • 예외 발생시키기
사용자가 직접 예외를 발생시키고 처리하는 방법

 

EX)

try:
    x = int(input("5의 배수를 입력: "))
    if x%5 != 0:
        raise Exception("5의 배수가 아님!!!")
    print(x)
except Exception as e:
    print("예외 발생: ",e)

 

  • 예외와 함수
1. 함수 안에서 예외가 발생하면 함수 안에 예외 처리하는 부분이 있는지 확인 => 있으면 예외처리
2. 함수 안에 없으면 함수를 호출한 상위 코드 블록에 예외 처리가 있는지 확인 => 있으면 예외처리
3. 여기도 없으면 프로그램 멈추고 error 메시지 출력

 

EX)

  • 함수 안에서 예외처리
def five_multiple():
    try:
        x = int(input("5의 배수를 입력: "))  
        print(x)
    except Exception as e:
        print("예외 발생: ",e)
five_multiple()

 

  • 함수 안 예외를 상위로 넘긴 경우
def five_multiple():
    x = int(input("5의 배수를 입력: "))
    print(x)
try:
    five_multiple()
except Exception as e:
    print("예외 발생:",e)

 

  • "raise"를 사용해서 함수 안에서 사용자 예외를 발생시키고 상위에서 처리
def five_multiple():
    x = int(input("5의 배수를 입력: "))
    if x%5 != 0:
        raise Exception("5의 배수가 아님!!!")
    print(x)
try:
    five_multiple()
except Exception as e:
    print("예외 발생: ",e)

 

  • 현재 예외를 다시 발생시키기
def five_multiple():
    try:
        x = int(input("5의 배수를 입력: "))
        if x%5 != 0:
            raise Exception("5의 배수가 아님!!!")
        print(x)
    except Exception as e:
        print("함수 안에서 예외 발생: ",e)
        raise   #raise로 현재 예외를 다시 발생 => 상위로 넘김
try:
    five_multiple()
except Exception as e:
    print("스크립트 파일에서 예외 발생:",e)

'3-1 > Python' 카테고리의 다른 글

13주차-Module, Numpy  (1) 2024.06.04
12주차-Class  (0) 2024.05.31
11주차-file read/ write  (0) 2024.05.17
10주차-Dictionary and Set  (0) 2024.05.12
9주차-Function  (0) 2024.05.12