Programming/Python

Python 예외 처리

Isaac S. Lee 2023. 6. 13. 11:53

예외 처리(Exception Handling)는 프로그램 실행 중에 발생할 수 있는 예외 상황을 감지하고, 그에 대한 적절한 대응을 수행하는 프로그래밍 기법이다.

예외 처리는 프로그램의 안정성과 신뢰성을 향상시키는 데 중요한 역할을 한다. 예외 처리를 통해 예상치 못한 상황에 대처하고, 적절한 오류 메시지를 제공하여 디버깅과 유지보수를 용이하게 할 수 있다.

 

try-except 문

가장 일반적인 예외 처리 방법은 try-except 문을 사용하는 것이다. try 블록에서 예외가 발생할 수 있는 코드를 실행하고, 예외가 발생하면 except 블록으로 제어가 이동하여 예외를 처리한다.

try:
    # 예외가 발생할 수 있는 코드
    ...
except ExceptionType:
    # 예외 처리 코드
    ...

 

다중 예외 처리

여러 종류의 예외를 다른 방식으로 처리해야 할 때, except 블록을 여러 개 사용하여 다중 예외 처리를 할 수 있다.

try:
    # 예외가 발생할 수 있는 코드
    ...
except ExceptionType1:
    # 예외 처리 코드
    ...
except ExceptionType2:
    # 예외 처리 코드
    ...

 

else 문

try 블록에서 예외가 발생하지 않은 경우에만 실행되는 else 블록을 사용할 수 있다. else 블록은 예외가 발생하지 않았을 때 추가적인 작업을 수행하는 데 유용하게 활용할 수 있다.

try:
    # 예외가 발생할 수 있는 코드
    ...
except ExceptionType:
    # 예외 처리 코드
    ...
else:
    # 예외가 발생하지 않았을 때 실행되는 코드
    ...

 

finally 문

finally 블록은 예외 발생 여부와 상관없이 항상 실행되어야 하는 코드를 포함하며, 주로 자원 해제나 정리 작업을 위해 활용된다.

try:
    # 예외가 발생할 수 있는 코드
    ...
except ExceptionType:
    # 예외 처리 코드
    ...
finally:
    # 항상 실행되는 코드
    ...

 

예외 정보 얻기

예외가 발생했을 때 해당 예외에 대한 정보를 얻을 수 있다.

except 블록에서 예외 객체를 변수에 할당하여 예외 정보에 접근할 수 있다.

try:
    # 예외가 발생할 수 있는 코드
    ...
except ExceptionType as e:
    # 예외 처리 코드
    print("예외 발생:", e)

 

사용자 정의 예외

파이썬에서는 사용자가 직접 예외를 정의하여 사용할 수 있다. 이는 특정 상황에서 예외를 발생시켜 프로그램의 흐름을 제어하고 오류를 명확히 식별할 수 있게 해준다.

class CustomException(Exception):
    pass

try:
    if some_condition:
        raise CustomException("Custom Exception Occurred!")
except CustomException as e:
    # 예외 처리 코드
    print("사용자 정의 예외 발생:", e)

 

예외 발생시키기

raise 키워드를 사용하여 의도적으로 예외를 발생시킬 수 있다. 이는 특정 조건이 충족되거나 예외 상황을 강제로 만들어야 할 때 유용하다.

def divide(a, b):
    if b == 0:
        raise ZeroDivisionError("나누는 수는 0이 될 수 없습니다.")
    return a / b

try:
    result = divide(10, 0)
except ZeroDivisionError as e:
    # 예외 처리 코드
    print("예외 발생:", e)

 

예외 처리의 계층 구조

파이썬은 예외 처리의 계층 구조를 가지고 있다. Exception 클래스가 모든 예외의 기본 클래스이며, 다양한 예외 클래스들이 이를 상속받아 사용된다. 이를 활용하여 예외 처리를 더 세분화하고 특정 예외에 대한 처리를 구체화할 수 있다.

try:
    # 예외가 발생할 수 있는 코드
    ...
except ValueError:
    # ValueError 예외 처리
    ...
except FileNotFoundError:
    # FileNotFoundError 예외 처리
    ...
except Exception as e:
    # 모든 예외 처리
    ...

 

예외 처리의 중첩

try-except 블록 안에 또 다른 try-except 블록을 사용하여 예외를 중첩시켜 처리할 수 있다.

try:
    # 예외가 발생할 수 있는 코드
    try:
        # 중첩된 예외 처리
        ...
    except ExceptionType1:
        # 예외 처리 코드
        ...
except ExceptionType2:
    # 예외 처리 코드
    ...