IT/Clean Code

[Clean Code] 7-1 예외처리

상쾌한기분 2021. 9. 6. 00:03
728x90
반응형

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

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

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
반응형