Python Try/Except 및 오류 처리

Python 스크립트가 충돌하는 것을 방지하세요. try, Except, finally 블록과 사용자 정의 예외를 올바르게 발생시키는 방법을 알아보세요.

에디터에서 사용해 보세요

개요

실제 프로그래밍 세계에서는 오류를 완전히 피할 수 없습니다. 파일이 삭제되거나, 네트워크 연결이 끊어지거나, 스크립트에 숫자가 필요한데 사용자가 문자를 입력할 수도 있습니다. 이러한 시나리오가 보호 조치 없이 발생하면 Python은 실행을 중단하고 예외(런타임 오류)를 발생시켜 전체 프로그램을 중단시킵니다. 오류 처리는 이러한 오류를 적절하게 예측하고 관리하는 기술입니다.

Python의 오류 관리의 기초는 'try' 및 'exclude' 블록 구조입니다. 잠재적으로 위험한 코드를 `try` 블록 안에 배치합니다. Python이 이를 실행하려고 시도합니다. 오류가 발생하면 충돌하는 대신 Python은 예외를 가로채고 즉시 점프하여 `제외` 블록 내에 포함된 코드를 실행합니다. 이를 통해 프로그램이 복구되고 친숙한 오류 메시지가 표시되며 계속 실행될 수 있습니다.

포괄적인 '제외:' 블록을 작성하는 것보다 구체적이고 대상이 지정된 예외를 포착하는 것이 중요한 모범 사례입니다. 예를 들어 `FileNotFoundError` 또는 `ValueError`를 포착하면 실제로 알아야 할 관련 없는 버그(예: 구문 오류)를 실수로 가리는 대신 예상한 정확한 문제를 처리하고 있음을 명시적으로 보장합니다.

Python은 또한 선택적인 `else` 블록을 제공합니다. 이 블록은 오류 발생 없이 `try` 블록이 완전히 성공적으로 완료된 경우에만 실행됩니다. 이곳은 위험한 작전의 성공 여부가 절대적으로 좌우되는 논리를 담기에 완벽한 장소입니다. 또한 `finally` 블록은 오류 발생 여부와 상관없이 무슨 일이 일어나더라도 코드를 실행할 수 있는 방법을 제공합니다. 'finally' 블록은 데이터베이스 연결 닫기 또는 파일 잠금 해제와 같은 정리 작업에 필수적입니다.

오류를 잡는 것 외에도 Python에서는 개발자가 'raise' 키워드를 사용하여 오류를 명시적으로 트리거할 수 있습니다. 예외를 발생시키면 논리에 엄격한 제약 조건을 적용하여 잘못된 데이터가 애플리케이션 상태를 손상시키기 전에 거부할 수 있습니다. Python의 기본 `Exception` 클래스에서 상속되는 사용자 정의 예외 클래스를 정의함으로써 개발자는 대규모 엔터프라이즈 애플리케이션을 위한 도메인별 오류 계층 구조를 만들 수 있습니다.

코드 및 실행 출력

잠재적으로 위험하거나 존재하지 않는 파일 구조와 상호 작용할 때 구조적 안전성을 만듭니다.

def divide_numbers(a, b):
    try:
        result = a / b
    except ZeroDivisionError:
        return "Error: Cannot divide by zero!"
    except TypeError:
        return "Error: Both arguments must be numbers."
    else:
        return f"The result is {result}"
    finally:
        print("Execution completed.")

print(divide_numbers(10, 2))
print(divide_numbers(10, 0))
터미널 출력
Execution completed.
The result is 5.0
Execution completed.
Error: Cannot divide by zero!

단계별 구현

  • 사용자 양식 제출 확인
  • 시간 초과 시 네트워크 요청이 충돌하지 않도록 보장
  • finally 블록에서 데이터베이스 연결을 안전하게 닫기

자주 묻는 질문

"인상" 키워드는 무엇입니까?

raise 키워드는 의도적으로 예외를 발생시키는 데 사용됩니다. 발생시킬 오류의 종류와 사용자에게 인쇄할 텍스트를 정의할 수 있습니다.

관련 주제

권장 Python 리소스

관련 대화형 튜토리얼, 치트 시트, 코드 비교를 통해 지식을 확장하세요.