[Python 기초]

[Python] Error & Exception 정리

dyk98 2024. 11. 26. 20:50

Error 와 Exception

사용 예시

  • 파일, 네트워크 등 리소스 정리.
  • 사용자 입력 검증.
  • 디버깅과 문제 해결.

Error vs Exception

  • Error : 프로그램 실행 중 발생하는 문제로, 프로그램이 비정상으로 종료될 수 있음.
    • 하지만! 개인적으로 프로그램이 잘 작동되지 않을때 Error 나는걸 선호…
    • 개인적으로 Error는 2번째로 좋은 경우라고 생각함…

에러 발생 예시

# 0으로 나누기 (ZeroDivisionError)
print(10 / 0)

# 없는 파일 열기 (FileNotFoundError)
file = open("없는파일.txt", "r")

# 잘못된 인덱스 접근 (IndexError)
numbers = [1, 2, 3]
print(numbers[5])
  • Exception: 에러의 한 종류로, edge case 를 다루거나 예외처리를 통해 프로그램이 멈추지 않고 정상적으로 동작하도록 처치 가능!
    • 사용 함수
      • try: 예외가 발생할 가능성이 있는 코드 작성.
      • except: 특정 예외를 처리.
      • finally: 예외 발생 여부와 관계없이 항상 실행. (*주로 리소스 정리(파일 닫기, 네트워크 연결 해제 등)에 사용)
    • 보통 tryexcept 를 사용하여 예외 처리
    # 기본적 예외 처리
    try:
        print(10 / 0)
    except ZeroDivisionError:
        print("0으로 나눌 수 없습니다!")
        
    # 여러 예외 처리
    try:
        x = int(input("숫자를 입력하세요: "))
        result = 10 / x
    except ValueError:
        print("유효한 숫자가 아닙니다.")
    except ZeroDivisionError:
        print("0으로 나눌 수 없습니다.")
    
    # 모든 예외 처리
    try:
        print(10 / 0)
    except:
        print("예외가 발생했습니다.")
        
    # finally 함수 예시
    # Resource 정리
    file = None
    try:
        file = open("data.txt", "r")
        data = file.read()
    except FileNotFoundError:
        print("파일을 찾을 수 없습니다.")
    finally:
        if file is not None:
            file.close()
        print("파일을 닫았습니다.")
        
    # 예외 없을 경우
    try:
        result = 10 / 2
        print(result)
    except ZeroDivisionError:
        print("0으로 나눌 수 없습니다.")
    finally:
        print("프로그램 종료.")
     
    

⚠️ 주의: 모든 예외를 처리하면 원인을 알기 어려우므로, 특정 예외를 명시적으로 처리하는 것이 권장.

예외 처리의 중요성

  1. 프로그램 안정성:
    • 예외 처리를 통해 프로그램이 예상치 못한 상황에서도 정상 동작을 유지.
  2. 디버깅에 도움:
    • 예외를 명확히 정의하면 문제 원인을 쉽게 파악 가능.
  3. 리소스 관리:
    • 파일, 네트워크, 데이터베이스 연결 등을 적절히 정리하여 자원 누수 방지.

예외 처리 시 주의사항

  1. 모든 예외를 무조건 처리하지 말 것:
    • 모든 예외를 처리하면 에러 원인을 알기 어려움.
    • 예외를 구체적으로 정의하고, 필요한 경우만 모든 예외를 처리.
  2. 불필요한 예외 처리 피하기:
    • 정상적인 흐름에서 발생할 수 있는 상황을 예외 처리하지 않도록 설계.
  3. 명확한 에러 메시지 제공:
    • 사용자와 개발자가 문제를 이해할 수 있도록 의미 있는 메시지를 출력.