2014-12-28 1 views
2

내 프로젝트에서 사용자 지정 로깅 모듈을 사용하고 있습니다. 사용할 수없는 경우 ImportError을 제기하는 대신 더미로 대체하고 싶습니다.가져 오기 오류를 처리하는 Pythonic 방법

try: 
    import logger 
except ImportError: 
    print 'Couldn\'t load logger' 

    class DummyLogger(object): 
     def __init__(self): 
      pass 
     def log(self, image): 
      pass 

    logger = DummyLogger() 

나는 그것이 우아한 해결책이라고 생각하지 않습니다

다음은 현재 것을 수행하는 코드입니다. 그것은 작동하지만, 그것은 좋지 않습니다. 더 좋은 방법이 있습니까?

try: 
    import ujson as json # very fast but might not be available in some cases 
except ImportError: 
    import json 
+0

왜 사용할 수 없습니까? –

+0

@ArashSaidi, 내 프로그램은 이미지 처리 파이프 라인입니다. 그것은 이미지를 취하고 그것에 물건을 넣고 결과를 저장합니다. 별도로, 나는 내부적으로 사용하는 분류자를 훈련시키는 스크립트를 가지고있다. 이 스크립트는 분류 자에게 먹이를주기 전에 원시 데이터에 대한 사전 처리 작업을 수행해야합니다. 전처리 루틴은 내가 말하는 모듈에있다. 이 모듈은 주 프로젝트의 하위 디렉토리에 있으므로 주 프로그램을 실행할 때 모든 것이 잘 작동합니다. 교육을 진행할 때 모듈은 파일 시스템에서 한 레벨 위에있는 로거를 보지 못합니다. – Pastafarianist

답변

0

당신은 할 수 있습니다 : 내가 JSON 파서와 과거에 이런 짓을 한

try: 
    import logger 
except ImportError: 
    import dummy_logger as logger 

: 나는 별도의 모듈에 더미 구현을 둘 것입니다

+0

고마워,이게 내가 정확히 찾고 있었던거야. '@ classmethod'를'@staticmethod'로 대체하여'cls' 인수를 제거 할 수도 있습니다. – Pastafarianist

6

dummy_loggger, 및 쓰기라는 좀 더 간결합니다.

try: 
    import logger 
except ImportError: 
    print 'Couldn\'t load logger' 

    class logger(object): 
     @classmethod 
     def log(cls, image): 
      pass 

현재 버전에서도 em pty __init__은 제거해야합니다. 아무런 가치가 없습니다.

+0

이것은 내 조직화 된 환경에서 완벽한 솔루션이 될 것입니다. 불행히도 이것은 여전히 ​​외부 의존성이 필요하기 때문에 100 % 방탄하지는 않습니다. 나는 당신의 대답을 upvoting지만 받아 @ AlexMartelli이야. – Pastafarianist