Python 에서 예외 발생 여부 확인 방법

PythonBeginner
지금 연습하기

소개

이 랩에서는 Python 에서 예외가 발생했는지 확인하는 방법을 배우게 됩니다. 이 랩은 예외를 이해하고 try-except 블록을 사용하여 예외를 포착하고 처리하여 프로그램 충돌을 방지하는 데 중점을 둡니다.

먼저 ZeroDivisionError 예외를 발생시키는 Python 스크립트를 생성하는 것으로 시작합니다. 그런 다음, try-except 블록을 사용하여 이 예외를 포착하고 우아하게 처리하여 프로그램이 계속 실행되도록 하는 방법을 배우게 됩니다.

예외 이해하기

이 단계에서는 Python 의 예외에 대해 배우게 됩니다. 예외는 프로그램 실행 중에 발생하여 정상적인 명령 흐름을 방해하는 이벤트입니다. 예외를 이해하는 것은 견고하고 신뢰할 수 있는 Python 코드를 작성하는 데 매우 중요합니다.

Python 에서 오류가 발생하면 예외가 발생합니다. 예외가 처리되지 않으면 프로그램이 종료되고 오류 메시지가 표시됩니다. 그러나 try-except 블록을 사용하면 예외를 포착하고 처리하여 프로그램이 충돌하는 것을 방지할 수 있습니다.

예외를 발생시키는 간단한 예시부터 시작해 보겠습니다.

  1. LabEx 환경에서 VS Code 편집기를 엽니다.

  2. ~/project 디렉토리에 division.py라는 새 파일을 생성합니다.

    ~/project/division.py
    
  3. division.py 파일에 다음 코드를 추가합니다.

    numerator = 10
    denominator = 0
    result = numerator / denominator
    print(result)
    

    이 코드는 10 을 0 으로 나누려고 시도하며, 이는 유효하지 않은 연산이므로 ZeroDivisionError 예외가 발생합니다.

  4. 터미널에서 다음 명령을 사용하여 스크립트를 실행합니다.

    python division.py
    

    다음과 유사한 출력을 볼 수 있습니다.

    Traceback (most recent call last):
      File "/home/labex/project/division.py", line 3, in <module>
        result = numerator / denominator
    ZeroDivisionError: division by zero
    

    트레이스백은 division.py 파일의 3 번째 줄에서 ZeroDivisionError가 발생했음을 보여줍니다. 예외가 처리되지 않았기 때문에 프로그램이 종료되었습니다.

이제 try-except 블록을 사용하여 이 예외를 처리하는 방법을 살펴보겠습니다.

try-except 를 사용하여 예외 포착

이 단계에서는 Python 에서 try-except 블록을 사용하여 예외를 포착하고 처리하는 방법을 배우게 됩니다. 이를 통해 오류가 발생하더라도 프로그램이 계속 실행될 수 있습니다.

try-except 블록의 기본 구조는 다음과 같습니다.

try:
    ## 예외를 발생시킬 수 있는 코드
except ExceptionType:
    ## 예외를 처리하는 코드

try 블록 내부의 코드가 실행됩니다. ExceptionType 유형의 예외가 발생하면 except 블록 내부의 코드가 실행됩니다. 예외가 발생하지 않으면 except 블록은 건너뜁니다.

이전 단계에서 division.py 파일을 수정하여 ZeroDivisionError 예외를 처리해 보겠습니다.

  1. VS Code 편집기에서 division.py 파일을 엽니다.

  2. try-except 블록을 포함하도록 코드를 수정합니다.

    try:
        numerator = 10
        denominator = 0
        result = numerator / denominator
        print(result)
    except ZeroDivisionError:
        print("Error: Cannot divide by zero.")
    

    이 코드에서 try 블록은 ZeroDivisionError를 발생시킬 수 있는 나눗셈 연산을 포함합니다. except 블록은 ZeroDivisionError를 포착하고 오류 메시지를 출력합니다.

  3. 터미널에서 다음 명령을 사용하여 스크립트를 실행합니다.

    python division.py
    

    다음 출력을 볼 수 있습니다.

    Error: Cannot divide by zero.
    

    프로그램은 충돌하는 대신 ZeroDivisionError를 우아하게 처리하고 유익한 메시지를 출력합니다.

이는 try-except 블록을 사용하여 예외로 인해 프로그램이 충돌하는 것을 방지하는 방법을 보여줍니다.

예외 유형 검사

이 단계에서는 except 블록 내에서 예외 유형을 검사하고 예외 메시지에 액세스하는 방법을 배우게 됩니다. 이를 통해 다양한 유형의 예외를 다른 방식으로 처리하고 더 많은 정보를 제공하는 오류 메시지를 제공할 수 있습니다.

예외가 포착되면 as 키워드를 사용하여 except 절에서 변수에 할당할 수 있습니다.

try:
    ## 예외를 발생시킬 수 있는 코드
except ExceptionType as e:
    ## 예외를 처리하는 코드
    ## 'e'는 예외 객체입니다.

그런 다음 변수 e는 예외 객체를 포함하며, 이를 사용하여 유형 및 메시지와 같은 예외에 대한 정보에 액세스할 수 있습니다.

division.py 파일을 수정하여 예외 유형을 검사하고 예외 메시지를 출력해 보겠습니다.

  1. VS Code 편집기에서 division.py 파일을 엽니다.

  2. 예외 유형을 검사하고 메시지를 출력하도록 코드를 수정합니다.

    try:
        numerator = 10
        denominator = 0
        result = numerator / denominator
        print(result)
    except ZeroDivisionError as e:
        print(f"Error: {type(e).__name__} - {e}")
    

    이 코드에서는 ZeroDivisionError를 포착하여 변수 e에 할당합니다. 그런 다음 type(e).__name__을 사용하여 예외 유형의 이름을 가져오고 e를 사용하여 예외 메시지를 가져옵니다. 두 가지 모두 형식화된 문자열로 출력합니다.

  3. 터미널에서 다음 명령을 사용하여 스크립트를 실행합니다.

    python division.py
    

    다음 출력을 볼 수 있습니다.

    Error: ZeroDivisionError - division by zero
    

    이제 출력에는 예외 유형 (ZeroDivisionError) 과 예외 메시지 (division by zero) 가 포함됩니다.

이를 통해 발생한 오류에 대한 더 자세한 정보를 제공하여 코드를 더 쉽게 디버깅할 수 있습니다. 또한 이 정보를 사용하여 다양한 유형의 예외를 다른 방식으로 처리하여 각 경우에 대해 더 구체적인 오류 처리를 제공할 수 있습니다.

요약

이 랩에서는 프로그램의 정상적인 흐름을 방해하는 이벤트인 Python 의 예외에 대해 배웠습니다. 오류가 발생하면 예외가 발생하고, 처리되지 않으면 프로그램이 종료됩니다.

또한 try-except 블록을 사용하여 예외를 포착하고 처리하여 프로그램 충돌을 방지하는 방법을 배웠습니다. 이 랩에서는 ZeroDivisionError와 이를 처리하기 위해 try-except를 사용하는 방법을 시연했습니다.