[파이썬] try except으로 에러라인 출력하기

반응형
    반응형

    try except 에러라인 출력하기

    파이썬에서는 try except로 예외 오류 처리를 함으로써 프로그램이 정지되지 않고 무사히 끝내는 장치가 마련되어 있습니다. 에러를 넘기고 무사히 프로그램을 끝낼 수 있어서 너무 좋은데 프로그램 고도화를 위해서는 에러를 일으키거나 어떤 에러가 주로 나오는지 알고 있어야 합니다.

    이번 포스팅에서는 try except를 이용해 에러를 일으키고 에러라인을 출력하는 방법에 대해 알아보도록 하겠습니다.

    에러 일으키기

    파이썬에서 tryexcept 블록을 사용할 때, except 블록에서 에러를 다시 발생시키려면 raise 를 사용할 수 있습니다. 이렇게 하면 현재 예외를 다시 던져서 상위 호출 스택으로 전달할 수 있습니다. 나눗셈시 0으로 무언가를 나누면 에러가 발생합니다. 이런 식으로 당연히 안 되는 에러를 일부러 발생시키는 것입니다. try except임에도 불구하고 raise를 이용해 에러를 일부러 일으킵니다.

    try:
    # 에러를 발생시킬 수 있는 코드
    result = 10 / 0
    except ZeroDivisionError as e:
    print("ZeroDivisionError가 발생했습니다.")
    # 에러를 다시 발생시킵니다
    raise

    새로운 에러로 발생시키기

    만약 예외를 다시 발생시키지 않고 새로운 예외를 발생시키고 싶다면, raise 키워드 뒤에 새로운 예외를 지정할 수 있습니다:

    try:
        # 에러를 발생시킬 수 있는 코드
        result = int("abc")
    except ValueError as e:
        print("ValueError가 발생했습니다.")
        # 새로운 예외를 발생시킵니다
        raise RuntimeError("새로운 RuntimeError 발생") from e

    원래의 ValueError 예외는 RuntimeError 예외의 원인으로 첨부되어 발생하게 됩니다. from e를 사용하면 원래 예외와 새로운 예외 사이의 연결을 유지할 수 있습니다.

    모든 종류의 예외를 출력후 에러 발생시키기

    모든 종류의 예외를 포착하고, 이를 출력한 후에 다시 발생시키고 싶다면, except 블록에서 Exception을 사용하여 모든 예외를 잡을 수 있습니다. Exception은 거의 모든 예외의 기본 클래스이기 때문에 대부분의 예외를 포착할 수 있습니다.

    try:
        # 에러를 발생시킬 수 있는 코드
        result = 10 / 0  # 예를 들어, ZeroDivisionError
    except Exception as e:
        # 모든 예외를 잡아서 처리
        print(f"예외가 발생했습니다: {e}")
        # 예외를 다시 발생시킵니다
        raise

    try 블록 내에서 어떤 예외가 발생하더라도 except 블록이 실행됩니다. Exception 클래스는 모든 내장 예외 클래스의 기본 클래스이므로, 대부분의 예외를 처리할 수 있습니다.

    모든 예외 처리할 때 주의사항

    모든 예외를 포착하는 것은 디버깅과 문제 해결을 어렵게 할 수 있습니다. 예외를 처리할 때는 가능한 구체적인 예외를 포착하고, 적절한 예외 처리를 하는 것이 좋습니다.

    Exception을 사용하는 경우: 이 방법은 대부분의 예외를 처리할 수 있지만, SystemExit, KeyboardInterrupt와 같은 시스템 관련 예외는 Exception으로 포착되지 않습니다. 이런 경우, BaseException을 사용할 수 있지만, 일반적으로는 사용을 권장하지 않습니다. 왜냐하면 시스템 종료나 사용자 인터럽트와 같은 중요한 예외까지 잡을 수 있기 때문입니다. 일반적으로는 Exception을 사용하는 것이 좋습니다.

    try:
        # 에러를 발생시킬 수 있는 코드
        result = 10 / 0
    except BaseException as e:
        # 모든 예외를 잡아서 처리
        print(f"예외가 발생했습니다: {e}")
        # 예외를 다시 발생시킵니다
        raise

    Exception과 별반 다를게 없어보이지만 BaseException을 사용하는 것은 보통 Exception을 사용하는 것보다 위험할 수 있으니 정말 필요할 때가 아니면 쓰지 않는 걸 추천드립니다.

    내장 예외 (Built-in Exceptions)

    파이썬에 내장되어 있는 예외 목록입니다.

    • Exception: 모든 내장 예외의 기본 클래스입니다.
    • ArithmeticError: 산술 연산 관련 예외의 기본 클래스입니다.
      • ZeroDivisionError: 0으로 나누려고 할 때 발생합니다.
      • OverflowError: 연산 결과가 숫자의 표현 범위를 초과할 때 발생합니다.
      • FloatingPointError: 부동 소수점 연산에서 오류가 발생할 때 발생합니다.
    • IndexError: 시퀀스의 유효하지 않은 인덱스에 접근할 때 발생합니다.
    • KeyError: 딕셔너리에서 존재하지 않는 키를 접근할 때 발생합니다.
    • TypeError: 연산이나 함수 호출에서 타입이 일치하지 않을 때 발생합니다.
    • ValueError: 연산이나 함수 호출에서 잘못된 값을 전달할 때 발생합니다.
      • UnpackValueError: 패킹 해제 시 값의 개수가 맞지 않을 때 발생합니다.
    • AttributeError: 객체에 없는 속성에 접근할 때 발생합니다.
    • NameError: 로컬 또는 글로벌 네임스페이스에서 존재하지 않는 이름을 참조할 때 발생합니다.
      • UnboundLocalError: 지역 변수가 참조되기 전에 할당되지 않았을 때 발생합니다.
    • ImportError: 모듈을 찾을 수 없거나 모듈에서 이름을 찾을 수 없을 때 발생합니다.
      • ModuleNotFoundError: 모듈을 찾을 수 없을 때 발생합니다.
    • FileNotFoundError: 파일을 찾을 수 없을 때 발생합니다.
    • IOError: I/O 연산에서 문제가 발생할 때 발생합니다.
      • BlockingIOError: 비차단 I/O 연산에서 문제가 발생할 때 발생합니다.
      • ChildProcessError: 자식 프로세스 관련 오류가 발생할 때 발생합니다.
    • OSError: 운영 체제 관련 오류가 발생할 때 발생합니다.
      • PermissionError: 권한이 없을 때 발생합니다.
      • FileExistsError: 파일이 이미 존재할 때 발생합니다.
    • RuntimeError: 프로그램 실행 중 발생하는 일반적인 오류입니다.
      • RecursionError: 재귀 호출이 너무 깊어졌을 때 발생합니다.
    • NotImplementedError: 추상 메서드가 서브클래스에서 구현되지 않았을 때 발생합니다.
    • SyntaxError: 문법 오류가 있을 때 발생합니다.
      • IndentationError: 들여쓰기가 잘못되었을 때 발생합니다.
        • TabError: 탭과 공백이 혼합되어 있을 때 발생합니다.
    • EOFError: 파일의 끝에 도달했을 때 발생합니다.
    • StopIteration: 반복이 끝났을 때 발생합니다 (주로 이터레이터에서).
    • KeyboardInterrupt: 사용자가 프로그램 실행을 중단할 때 발생합니다.
    • BaseException: Exception의 기본 클래스입니다. 시스템 종료나 사용자 인터럽트 등의 특별한 예외를 처리할 때 사용합니다.

    사용자 정의 예외 만들기

    파이썬에서는 사용자 정의 예외를 만들 수 있으며, 이는 Exception 클래스를 상속받아 정의합니다. 사용자 정의 예외는 특정 상황에서 필요한 정보를 제공하거나 예외를 보다 구체적으로 처리할 때 유용합니다.

    사용자 정의 예외를 만드는 방법은 다음과 같습니다:

    class CustomError(Exception):
        def __init__(self, message):
            super().__init__(message)
            self.message = message
    
    try:
        raise CustomError("이것은 사용자 정의 예외입니다.")
    except CustomError as e:
        print(f"발생한 예외: {e}")

    이와 같은 예외 클래스는 자신의 프로그램 로직에 맞게 사용자 정의 예외를 만들고 처리하는 데 도움을 줍니다. 예외를 임의로 만들면 프로그램에서 발생하는 에러에 대해 컨트롤 할 수 있기에 굉장히 중요한 방법 중 하나입니다.

     

    함께 보면 좋은 글

     

     

    [Python] 예외처리

    예외처리에 대해 알아봅시다. 프로그램을 실행하다 보면 의도치 않게 오류가 발생하는 경우가 많이 생깁니다. 오류가 나서 프로그램이 중단될 수도 있고 있는 파일이 없어져서 처리가 안될 수

    seong6496.tistory.com

     

     

    [업무자동화] 파이썬으로 키보드 제어하기

    pyautogui 키보드 제어 파이썬 모듈인 pyautogui를 통한 키보드 제어방법입니다. 키보드 제어는 원하는 키를 자동으로 입력하고 떼는 기능만이 전부라서 많은 지식이 필요하진 않습니다. pyautogui 키보

    seong6496.tistory.com

     

     

    [파이썬] 문자열 포맷팅과 부등식(feat.패딩)

    문자열 패딩 파이썬에서는 f-string이나 문자열 포맷팅으로 변수를 문자열에 삽입할 수 있는데 부등식 기호를 잘 쓰면 패딩 기능이 가능합니다. 즉, 문자열의 최소 길이를 내가 지정할 수도 있고

    seong6496.tistory.com

     

    댓글

    Designed by JB FACTORY

    ....