[Clean Code] 7-1 예외처리

2021. 9. 6. 00:03·IT/Clean Code
반응형

예외처리 함수 깔끔하게 하기

호출자 코드와 오류 코드 처리 코드를 분리한다.

1안

class DeviceController:

    def shutdown(self):
        try:
            self.try_shutdown()
        except (DeviceControllerError, DeviceShutdownError) as e:
            ...
            logger.error()

    def try_shutdown(self):
        device = self.get_handle()
        device.pause()
        device.clear_queue()
        device.close()

    def get_handle(self, device_id: int):
        ...
        raise DeviceControllerError('Invalid device handle')

2안

def catch_error(catch: tuple):
    def decorator(func: Callable):

        @functools.wraps(func)
        def wrapper(*args, **kwargs):
            try:
                return func(*args, **kwargs)
            except catch as e:
                logger.error(e)

        return wrapper

    return decorator


class DeviceController:

    @catch_error(catch = (DeviceControllerError, DeviceShutdownError))
    def shutdown(self):
        device = self.get_handle()
        device.pause()
        device.clear_queue()
        device.close()

    def get_handle(self, device_id:int):
        ...
        raise DeviceControllerError('Invalid device handle')

Python 에서 내가 사용 하는 방법
아래와 같이 간단하게 에러 체크를 할수 있다.

def catch_error(func: Callable):
    def wrapper(*args, **kwargs):
        try:
            return func(*args, **kwargs)
        except Exception as e:
            ...
            logger.error(e)

    return wrapper

@catch_error
def my_func():
    ...
728x90
반응형
저작자표시 비영리 (새창열림)
'IT/Clean Code' 카테고리의 다른 글
  • [Clean Code] 9-2 도메인 특화 테스트
  • [Clean Code] 9-1 TDD
  • [Clean Code] 6-2 객체지향 절차지향 2
  • [Clean Code] 6-1 객체지향 절차지향
상쾌한기분
상쾌한기분
  • 상쾌한기분
    상쾌한기분
    상쾌한기분
  • 전체
    오늘
    어제
    • 분류 전체보기 (250)
      • Python (44)
        • Python (26)
        • Django (6)
        • Flask (4)
        • Open Source (6)
      • Kotlin & Java (5)
        • Spring (2)
        • 프로젝트 (1)
      • Go (11)
      • Database (24)
        • MySQL (21)
        • Redis (3)
      • Infrastructure (2)
        • CDC (4)
        • Kafka (5)
        • Prometheus (2)
        • Fluentd (11)
        • Docker (1)
        • Airflow (2)
        • VPN (2)
      • IT (25)
        • AI (9)
        • Langchain (8)
        • Web (18)
        • Git (8)
        • 리팩토링 (9)
        • Micro Service Architecture (8)
        • Clean Code (16)
        • Design Pattern (0)
        • 수학 (1)
        • 알고리즘 (14)
      • OS (14)
        • Centos (10)
        • Ubuntu (3)
        • Mac (1)
      • Search Engine (2)
        • ElasticSearch (1)
        • Lucene Solr (1)
      • PHP (2)
        • Laravel (1)
        • Codeigniter (1)
  • 블로그 메뉴

    • Github 방문
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    docker
    Redis
    performance
    fluentd
    Langchain
    Golang
    Kafka
    LLM
    prompt
    go
    오블완
    ollama
    티스토리챌린지
    git
    python
    http
    MYSQL
    파이썬
    백준
    CDC
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
상쾌한기분
[Clean Code] 7-1 예외처리
상단으로

티스토리툴바