본문 바로가기
초보자를 위한 Python/6. Python 파일처리

6.6 파이썬 예외 처리: try, catch, finally & raise

by 엔터티 2022. 11. 16.
반응형

파이썬에서 예외 처리란 무엇입니까?

예외처리는 프로그램 실행 시 발생하는 오류입니다. 그러나 프로그램을 실행하는 동안 파이썬은 프로그램 충돌을 방지하기 위해 처리해야 하는 예외를 생성합니다. 

파이썬 언어에서 예외는 오류 시 자동으로 트리거되거나 코드에 의해 트리거되고 차단될 수 있습니다.

 

예외는 이벤트가 발생할 수 있지만 이러한 유형의 이벤트가 드물게 발생함을 나타냅니다. 

메서드가 예외를 처리할 수 없으면 호출자 함수에 throw됩니다. 결국 main 함수에서 예외가 발생하면 프로그램이 갑자기 종료됩니다.

 

목차

    예외의 일반적인 예:

    • 0으로 나누기
    • 존재하지 않는 파일에 액세스합니다.
    • 호환되지 않는 두 가지 유형 추가
    • 존재하지 않는 시퀀스 인덱스에 액세스하려고 합니다.
    • 연결이 끊긴 데이터베이스 서버에서 테이블을 제거합니다.
    • ATM 출금 가능 금액 이상

    예외를 사용해야 하는 이유

    파이썬에서 예외를 사용하는 이유는 다음과 같습니다.

    • 예외 처리를 사용하면 오류 처리 코드를 일반 코드와 분리할 수 있습니다.
    • 예외는 오류를 나타내는 파이썬 개체입니다.
    • 코드 주석과 마찬가지로 예외는 프로그램이 기대하는 바를 상기시키는 데 도움이 됩니다.
    • 코드를 명확하게 하고 가독성을 높입니다.
    • 오류 처리가 한 곳에서 한 방식으로 발생하므로 결과를 자극할 수 있습니다.
    • 예외는 오류 메시지를 처리하는 편리한 방법입니다.
    • 파이썬에서는 예외 발생 메서드를 사용하여 프로그램에서 예외를 발생시킬 수 있습니다.
    • 예외를 발생시키면 현재 코드 실행을 중단하고 처리될 때까지 예외를 예상대로 되돌립니다.
    • 직접 처리할 수 없는 구성 요소에 대한 예외 처리.

    예외 규정

    다음은 파이썬 예외 처리의 몇가지 필수 규칙 입니다.

    • 예외는 클래스 객체여야 합니다.
    • 클래스 예외의 경우 특정 클래스를 언급하는 except 절과 함께 try 문을 사용할 수 있습니다.
    • 문이나 표현이 문법적으로 정확하더라도 실행하려고 하면 오류가 표시될 수 있습니다.
    • 실행 중에 발견된 오류를 예외라고 하며 무조건 치명적이지는 않습니다.

    파이썬의 예외처리 메커니즘

    예외처리는 다음 4개의 키워드로 관리됩니다.

    1. try
    2. catch
    3. finally
    4. throw

    Try 문

    try 문에는 키워드 try, 콜론(:) 및 예외가 발생할 수 있는 코드 모음이 뒤따릅니다. 하나 이상의 절이 있습니다.

    try 문을 실행하는 동안 예외가 발생하지 않으면 인터프리터는 해당 특정 try 문에 대한 예외 처리기를 무시합니다.

    경우에 따라 try suite에서 예외가 발생하면 try suite는 만료되고 프로그램 제어는 try suite 다음의 일치하는 예외 핸들러로 이전됩니다.

    구문 : 

    try:
    statement(s)

    catch 문

    Catch 블록은 한 번에 하나의 인수를 사용하며, 이는 포착할 가능성이 높은 예외 유형입니다. 이러한 인수는 다양할 수 있는 특정 유형의 예외에서 포괄 예외 범주에 이르기까지 다양할 수 있습니다.

    catch 블록 규칙:

    • 키워드 catch를 사용하여 catch 블록을 정의할 수 있습니다.
    • Catch Exception 매개변수는 항상 괄호로 묶여 있습니다.
    • 항상 catch 블록이 처리하는 예외 유형을 나타냅니다.
    • 예외 처리 코드는 두 개의 {} 중괄호 사이에 작성됩니다.
    • 단일 try 블록 내에 여러 catch 블록을 배치할 수 있습니다.
    • catch 블록은 try 블록 다음에만 사용할 수 있습니다.
    • 모든 catch 블록은 하위 클래스에서 상위 클래스 예외로 순서를 지정해야 합니다.

    예시 : 

    try
    }
    catch (ArrayIndexOutOfBoundsException e) {
    System.err.printin("먼저 찾음 " + e.getMessage()); } catch (IOException e) {
    System.err.printin("두번째 찾음 " + e.getMessage());
    }

    finally 문

    finally문은 블록은 예외 발생 여부에 관계없이 항상 실행됩니다. final 키워드를 사용하면 try-catch 블록 뒤에 오는 코드 블록을 만들 수 있습니다.

     

    마지막으로 절은 선택 사항입니다. 모든 조건에서 실행되어야 하는 정리 작업을 정의하기 위한 것입니다.

    try:
        raise KeyboardInterrupt
    finally:
        print 'welcome, world!'
    Output
    Welcome, world!
    KeyboardInterrupt

    finally 절은 try 문보다 먼저 실행됩니다.

     

    Raise 문

    raise 문은 예외 개체를 초기화하는 인수를 지정합니다. 여기에서 쉼표는 예외 이름과 쉼표 뒤에 오는 인수 또는 인수의 튜플을 따릅니다.

    구문 : 

    raise [Exception [, args [, traceback]]]

    이 구문에서 인수는 선택 사항이며 실행 시 예외 인수 값은 항상 없음입니다.

    예외는 문자열, 클래스, 숫자 또는 객체와 같은 모든 값이 될 수 있습니다 . 파이썬 코어에서 발생하는 이러한 예외의 대부분은 클래스의 인스턴스인 인수가 있는 클래스입니다.

     

    주요 파이썬 에러

    Error Type 설명
    ArithmeticError ArithmeticError는 모든 산술 예외에 대한 기본 클래스 역할을 합니다. 산술 연산의 오류에 대해 발생합니다.
    ImportError 존재하지 않는 모듈을 가져오려고 하면 ImportError가 발생합니다. 이러한 종류의 예외는 모듈 이름을 잘못 입력했거나 표준 경로에 없는 모듈인 경우 발생합니다.
    IndexError 범위를 벗어난 시퀀스를 참조하려고 하면 IndexError가 발생합니다.
    KeyError 사전에서 특정 키를 찾을 수 없으면 KeyError 예외가 발생합니다.
    NameError 로컬 또는 전역 네임스페이스에 존재하지 않는 이름이 코드에서 참조될 때 NameError가 발생합니다.
    ValueError 함수 또는 기본 제공 작업이 올바른 유형일 수 있지만 적절한 값이 없는 인수를 받으면 값 오류가 발생합니다.
    EOFerror 이러한 종류의 오류는 내장 함수(input() 또는 raw_input()) 중 하나가 데이터를 읽지 않고 EOF 조건에 도달할 때 발생합니다.
    ZeroDivisonError 모든 숫자 유형에 대해 0으로 나누기 또는 모듈이 발생할 때 발생하는 이러한 유형의 오류입니다.
    IOError- 입/출력 작업이 실패할 때 발생하는 이러한 종류의 오류입니다.
    syntaxError 파이썬 구문에 오류가 있을 때 SyntaxErrors가 발생합니다.
    IndentationError 들여쓰기가 제대로 정의되지 않은 경우 발생하는 오류입니다.

     

    주요 파이썬 예외

    예외 설명
    ArithmeticException 0으로 나누기와 같은 산술 오류.
    ArraylndexOutOfBoundsException 배열 인덱스가 범위를 벗어났습니다.
    ArrayStoreException 할당은 호환되지 않는 유형의 배열 요소에 도움이 됩니다.
    ClassCastException 잘못된 캐스트
    MlegalMonitorStateException 잠금 해제된 스레드에서 대기하는 것과 같은 잘못된 모니터 작업입니다.
    MlegalStateException 환경 또는 애플리케이션이 잘못된 상태입니다.
    ClassNotFoundException 클래스를 찾을 수 없습니다.
    CloneNotSupportedException Cloneable 인터페이스를 구현하지 않는 개체를 복제하려고 합니다.
    Illegal AccessException 클래스에 대한 액세스가 거부되었습니다
    InstantiationException 인터페이스 또는 추상 클래스의 개체를 만들려고 할 때 발생합니다.
    CloneNotSupportedException 인터페이스를 구현하지 않는 개체를 복제하려고 시도합니다.

    오류 vs 예외

    오류 예외
    파이썬의 모든 오류는 확인되지 않은 유형입니다. 예외에는 선택된 유형과 선택되지 않은 유형이 모두 포함됩니다.
    런타임에 컴파일러에 알려지지 않은 오류가 발생합니다. 예외는 try-catch 블록의 도움으로 처리하여 복구할 수 있습니다.
    오류는 대부분 응용 프로그램이 실행되는 환경에서 발생합니다. 응용 프로그램 자체에서 예외가 발생합니다.
    예: OutofMemoryError 예: 확인된 예외, SQL 예외, NullPointerException 등.

     

    요약 : 

    • 예외는 프로그램 실행 중에 발생한 오류입니다.
    • 예외는 이벤트가 발생할 수 있지만 이러한 유형의 이벤트가 드물게 발생함을 나타냅니다.
    • 예외의 일반적인 예는 1) 0으로 나누기, 2) 존재하지 않는 파일 액세스, 3) 호환되지 않는 두 가지 유형 추가입니다.
    • 예외는 오류를 나타내는 파이썬 개체입니다.
    • try 문에는 키워드 try, 콜론(:) 및 예외가 발생할 수 있는 코드 모음이 뒤따릅니다. 하나 이상의 절이 있습니다.
    • Catch 블록은 한 번에 하나의 인수를 사용하며, 이는 포착할 가능성이 높은 예외 유형입니다.
    • raise 문은 예외 개체를 초기화하는 인수를 지정합니다.
    • finally 블록은 예외 발생 여부에 관계없이 항상 실행됩니다.

    파이썬 예외처리

    반응형

    댓글