본문 바로가기

프로그래밍/[Python] 파이썬

[Python] 파이썬의 주요 내장 예외 클래스를 정리 (try/except문)

by GenieIT* 2024. 10. 28.

728x90
728x90

 

1. 주요 내장 예외 클래스 종류 및 예제

  • 파이썬의 주요 내장 예외 클래스들에 대해 예제를 통해 설명해 보겠습니다.

 

1-1. AttributeError

  • 존재하지 않는 속성에 접근할 때 발생합니다.
class Sample:
    pass

obj = Sample()
try:
    obj.some_method()  # 존재하지 않는 메서드 호출
except AttributeError as e:
    print("AttributeError:", e)
    
'''
실행 결과
AttributeError: 'Sample' object has no attribute 'some_method'
'''

 

1-2. NameError

  • 정의되지 않은 변수를 참조할 때 발생합니다.
try:
    print(undeclared_variable)  # 선언되지 않은 변수 접근
except NameError as e:
    print("NameError:", e)
    
'''
실행 결과
NameError: name 'undeclared_variable' is not defined
'''

 

1-3. TypeError

  • 잘못된 타입의 객체를 사용하려 할 때 발생합니다.
try:
    print("Hello" + 5)  # 문자열과 정수 더하기 시도
except TypeError as e:
    print("TypeError:", e)
    
'''
실행 결과
TypeError: can only concatenate str (not "int") to str
'''

 

1-4. ValueError

  • 타입은 맞지만 값이 적절하지 않을 때 발생합니다.
try:
    int("abc")  # 숫자가 아닌 문자열을 정수로 변환 시도
except ValueError as e:
    print("ValueError:", e)

'''
실행 결과
ValueError: invalid literal for int() with base 10: 'abc'
'''

 

1-5. IndexError  

  • 시퀀스 자료형에서 잘못된 인덱스를 참조할 때 발생합니다.
lst = [1, 2, 3]
try:
    print(lst[5])  # 범위를 초과한 인덱스 접근
except IndexError as e:
    print("IndexError:", e)
    
'''
실행 결과
IndexError: list index out of range
'''

 

1-6. KeyError

  • 딕셔너리에서 존재하지 않는 키를 참조할 때 발생합니다.
my_dict = {"name": "Alice"}
try:
    print(my_dict["age"])  # 존재하지 않는 키 접근
except KeyError as e:
    print("KeyError:", e)
    
'''
실행 결과
KeyError: 'age'
'''

 

1-7. FileNotFoundError

  • 파일이 존재하지 않을 때 발생합니다.
try:
    with open("non_existent_file.txt") as f:
        content = f.read()
except FileNotFoundError as e:
    print("FileNotFoundError:", e)
    
'''
실행 결과
FileNotFoundError: [Errno 2] No such file or directory: 'non_existent_file.txt'
'''

 

1-8. PermissionError

  • 파일에 대한 권한이 없을 때 발생합니다.
try:
    with open("/root/secret_file.txt") as f:  # 관리자 권한이 필요한 파일 접근 시도
        content = f.read()
except PermissionError as e:
    print("PermissionError:", e)

 

1-9. ZeroDivisionError

  • 숫자를 0으로 나눌 때 발생합니다.
try:
    result = 10 / 0  # 0으로 나누기 시도
except ZeroDivisionError as e:
    print("ZeroDivisionError:", e)
    
'''
실행 결과
ZeroDivisionError: division by zero
'''

 

1-10. OSError

  • 운영 체제에서 발생하는 일반적인 오류입니다. 예를 들어, 잘못된 파일 경로로 디렉터리 생성 시도 시 발생할 수 있습니다.
import os

try:
    os.mkdir("/invalid_path/test")  # 잘못된 경로로 디렉터리 생성 시도
except OSError as e:
    print("OSError:", e)
    
'''
실행 결과
OSError: [WinError 3] 지정된 경로를 찾을 수 없습니다: '/invalid_path/test'
'''

 

1-11. ImportError

  • 모듈을 찾을 수 없거나 로드할 수 없을 때 발생합니다.
try:
    import non_existent_module  # 존재하지 않는 모듈을 임포트 시도
except ImportError as e:
    print("ImportError:", e)
    
'''
실행 결과
ImportError: No module named 'non_existent_module'
'''

 

1-12. StopIteration

  • 반복이 끝났음을 나타낼 때 발생합니다.
it = iter([1, 2, 3])
try:
    print(next(it))
    print(next(it))
    print(next(it))
    print(next(it))  # 반복이 끝났는데도 next() 호출
except StopIteration as e:
    print("StopIteration:", e)

 

1-13. EOFError

  • 파일이나 input()으로 데이터를 읽을 때 더 이상 데이터가 없을 때 발생합니다. 대화형 프롬프트에서 발생할 수 있는 예외입니다.
  • 터미널에서 Ctrl+D (macOS/Linux) 또는 Ctrl+Z (Windows) 실행해야 발생합니다.
try:
    data = input("입력하세요: ")  # 대화형 환경에서 종료 시 발생
except EOFError as e:
    print("EOFError:", e)

 

1-14. RuntimeError

  • 일반적인 실행 오류가 발생했지만 다른 예외로 구분되지 않을 때 사용됩니다.
import threading

def worker():
    print("스레드 작업 중")

t = threading.Thread(target=worker)
t.start()

try:
    t.start()  # 이미 시작한 스레드를 다시 시작하려고 할 때 RuntimeError 발생
except RuntimeError as e:
    print("RuntimeError 발생:", e)

'''
실행 결과
RuntimeError 발생: threads can only be started once
'''

 

1-15. NotImplementedError

  • 구현되지 않은 메서드나 함수에 대해 호출이 이루어졌을 때 발생합니다.
class Base:
    def method(self):
        raise NotImplementedError("이 메서드는 서브클래스에서 구현되어야 합니다.")

class Derived(Base):
    pass

try:
    d = Derived()
    d.method()  # 구현되지 않은 메서드 호출
except NotImplementedError as e:
    print("NotImplementedError:", e)
    
'''
실행 결과
NotImplementedError: 이 메서드는 서브클래스에서 구현되어야 합니다.
'''

 

1-16. RecursionError

  • 재귀 호출이 너무 깊어져서 파이썬이 허용하는 최대 깊이를 초과할 때 발생합니다.
def recursive():
    return recursive()

try:
    recursive()  # 무한 재귀 호출
except RecursionError as e:
    print("RecursionError:", e)
    
'''
실행 결과
RecursionError: maximum recursion depth exceeded
'''

 


 

 

 

728x90