ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 75 - (파이썬) 예외 처리의 else finally 구문
    study with Q - 파이썬 2024. 8. 21. 15:44

    # 예외 처리 구문

    try:
      # 예외가 발생할 가능성이 있는 코드
      pass
    except:
      # 예외가 발생했을 때 실행할 코드
      pass
    else:
      # 예외가 발생하지 않았을 때 실행할 코드
      pass
    finally:
      # 무조건 실행하는 코드
       pass

     

    위의 순서를 맞춰서 사용하고, 사용할 수 있는 조합이 정해져있다.

     

    여러 개의 조합이 있긴 한디 실제로는

    try+except 또는 try+except+finally 조합을 주로 사용한다.

     

    # 예외처리의 else 구문 

    : else는 왜 안쓰나요? → else 구문 내부로 들어가나, try 내부로 들어가나 차이가 나지 않는다.

     

    try+except+else 구문을 사용한 코드

    try:
      # 예외가 발생할 가능성이 있는 코드
      celsius= int(input("정수 입력> "))
      
    except:
      # 예외가 발생했을 때 실행할 코드
      print("정수 형태로 입력하시오.")
    else:
      # 예외가 발생하지 않았을 때 실행할 코드
      print("화씨 변환하면 :", celsius * 9/5 + 32)
    
    >>>
    정수 입력> 36 
    화씨 변환하면 : 96.8

     

    try+except 구문을 사용한 코드

    try:
      # 예외가 발생할 가능성이 있는 코드
      celsius= int(input("정수 입력> "))
      print("화씨 변환하면 :", celsius * 9/5 + 32)
      
    except:
      # 예외가 발생했을 때 실행할 코드
      print("정수 형태로 입력하시오.")
      
    >>>
    정수 입력> 36
    화씨 변환하면 : 96.8

     

    try+except으로만 사용한 코드와 차이가 없고 코드 길이도 짧다. 그리고 다른 언어에서 사용되지 않기도 하고 그렇게 특징적이면서 혁신적으로 쩌는 문법도 아니기에 굳이 else 까지 쓰지 않는다.

     

    # 예외처리의 finally 구문 

    : 근데 얘는 좀 쩌는 구문이다. 

    : 예외에 상관없이 실행되는 코드로 함수 내부, 반복문 내부에 있을 때 그 멋짐이 잘 드러난다.

    def 함수():
      print("함수()에 진입했습니다.")
      try:
        print("try 구문에 진입했습니다.")
        return
        print("try 구문이 끝났습니다.")
      except:
        print("except 구문에 진입했습니다.")
      finally:
        print("finally 구문에 진입했습니다.")
      print("함수()가 끝났습니다.")
    
    함수()
    
    >>>
    함수()에 진입했습니다.
    try 구문에 진입했습니다.
    finally 구문에 진입했습니다.

     

    위와 같이 try 구문에서 return을 때려도 finally까지 나오는 것을 알 수 있다.

    참고로, for 반복문 구문에서도 동일하게 볼 수 있다.

     

    다른 예시)

    def fun(filename):
      fn = open(filename, "r")
      con = fn.read()
      fig = int(con)
      fn.close()
      return con
    
    
    filename = input("파일 이름> ")
    print(fun(filename))

    라는 함수를 만들었다 할 때, 1. 존재하지 않는 파일 이름을 입력하거나 2. 숫자로 변환할 수 없거나 하면 value error가 발생할 것. 따라서 파일을 열었을 때, 파일이 존재하지 않는 경우를 예외처리 때려버릴 것

     

    요렇게

    def fun(filename):
      try:
        fn = open(filename, "r")
        con = fn.read()
        try:
          fig = int(con)
          return con
        except:
          print("숫자로 변환할 수 없는 파일입니다.")
        finally:
          fn.close()
      except:
      print("존재하지 않는 파일입니다. 다시 확인해주세요.")
    
    
    filename = input("파일 이름> ")
    print(fun(filename))

     

    참고로)

    finally는 예외가 발생하던 아니던 무조건 실행하는 코드이지 예외 자체를 막는 코드는 아니기 때문에, except, finally 구문 내부에서 예외가 발생하면 프로그램이 죽는다.


    https://replit.com/@wh3308/yeoeceori2#main.py

Designed by Tistory.