[Python 입문 강좌 - 18] 파이썬 예외처리 정리 및 사용법

 

더보기

 


1. 예외처리란?

 

예외란 프로그램이 실행될 때 발생하는 오류로, 이를 예측하고 처리해주는 것이 중요합니다. 예외처리는 이러한 예외적 상황이 발생했을 때, 프로그램이 비정상적으로 종료되는 것을 방지해줍니다. 예외처리는 프로그램의 안정성을 높이고, 비정상적인 종료를 방지하여 사용자에게 더 나은 경험을 제공합니다. 예외처리를 적절하게 수행하면 프로그램의 오류를 예측하고 대처할 수 있으며, 디버깅 시간을 줄일 수 있습니다.

 

파이썬에서 try-except문을 이용하여 예외처리를 할 수 있습니다. try문에서 예외가 발생할 가능성이 있는 코드를 작성하고, except문에서 해당 예외를 처리합니다. 만약 예외가 발생하지 않으면 except문은 실행되지 않습니다. 아래 코드는 예외처리를 하는 가장 기본적인 구조입니다.

 

try:
    # 예외가 발생할 가능성이 있는 코드
except 예외종류 as 예외변수:
    # 해당 예외를 처리하는 코드

 


2. 여러 개의 예외 처리하기

 

try-except문에서 여러 개의 예외를 처리할 수도 있습니다. 이 경우, except문을 여러 개 사용하여 각각의 예외를 처리합니다.  아래 코드는  open함수를 이용해 example.txt파일을 열고, 파일 내용을 읽어옵니다. 이때, 파일이 없거나 권한이 없는 경우 해당하는 예외 처리 코드가 실행됩니다. 마지막 except블록은 예외 처리를 위한 특정한 예외 종류를 지정하지 않았으므로, 예상치 못한 예외가 발생할 경우에도 코드가 실행됩니다.

 

try:
    # 예외가 발생할 가능성이 있는 코드
    file = open("example.txt", "r")
    content = file.read()
    file.close()
except FileNotFoundError:
    # 해당 예외를 처리하는 코드
    print("파일을 찾을 수 없습니다.")
except PermissionError:
    # 해당 예외를 처리하는 코드
    print("파일에 대한 권한이 없습니다.")
except:
    # 해당 예외를 처리하는 코드
    print("예상치 못한 예외가 발생했습니다.")

 



3. 모든 예외 처리하기


모든 예외를 처리하고 싶다면, except문에서 Exception을 사용합니다. 아래 코드는 open함수를 이용해 example.txt파일을 열고, 파일 내용을 읽어옵니다. 만약 파일이 없거나, 권한이 없는 경우, Exception 클래스를 이용하여 모든 예외를 처리하는 코드가 실행되며, 예외 정보는 e객체를 이용해 출력됩니다.

 

try:
    file = open("example.txt", "r")
    content = file.read()
    file.close()
except Exception as e:
    print("예외가 발생했습니다: ", e)

 


4. else문과 finally문

 

try-except문에서는 else문과 finally문을 사용할 수도 있습니다. else문은 예외가 발생하지 않았을 때 실행되는 코드를, finally문은 예외 발생 여부와 상관없이 실행되는 코드를 작성합니다. 아래 코드는 open함수를 이용해 example.txt파일을 열고, 파일 내용을 읽어옵니다. 이때, 파일이 없는 경우, FileNotFoundError 예외가 발생하게 됩니다. 이때 except블록으로 이동하여 해당하는 예외를 처리하며, 파일이 존재하는 경우에는 else 블록으로 이동하여 파일 내용을 출력하고 파일을 닫습니다. 그리고 마지막으로, finally 블록이 실행됩니다.

 

try:
    # 예외가 발생할 가능성이 있는 코드
    file = open("example.txt", "r")
    content = file.read()
except FileNotFoundError:
    # 해당 예외를 처리하는 코드
    print("파일을 찾을 수 없습니다.")
else:
    # 예외가 발생하지 않은 경우 실행되는 코드
    print(content)
    file.close()
finally:
    # 예외 발생 여부에 상관없이 항상 실행되는 코드
    print("코드 실행이 완료되었습니다.")

 


5. 예외 발생시키기

 

파이썬에서는 raise문을 이용하여 예외를 발생시킬 수 있습니다. 이를 이용하면 사용자가 직접 예외를 정의하고 발생시킬 수 있습니다. 아래 코드에서는 인수 x가 0인 경우 ZeroDivisionError 예외를 발생시킵니다. 이때, raise문을 이용하여 예외 메시지와 함께 예외를 발생시킵니다.


#예외를 발생시키는 방법
raise 예외종류("예외 메시지")

#예시
def divide(x):
    if x == 0:
        raise ZeroDivisionError("0으로 나눌 수 없습니다.")
    return 10 / x

 


6. 사용자 정의 예외

 

사용자가 직접 예외를 정의하고 발생시킬 수도 있습니다. 이 경우, Exception 클래스를 상속받아 새로운 예외 클래스를 정의합니다. 아래 코드에서는 square함수를 작성하여 인수 num이 음수인 경우 NegativeNumber 예외를 발생시킵니다. 이때, 사용자가 직접 정의한 NegativeNumver 예외 클래스를 이용하여 예외를 정의하고, raise문을 이용하여 예외를 발생시킵니다. 

 

class NegativeNumber(Exception):
    def __init__(self, num):
        self.num = num
        self.message = "양수를 입력해주세요."

    def __str__(self):
        return f"{self.num}는 {self.message}"

def square(num):
    if num < 0:
        raise NegativeNumber(num)
    else:
        return num * num