处理导入错误的Pythonic方法

处理导入错误的Pythonic方法,python,import,python-import,Python,Import,Python Import,我正在我的项目中使用一个自定义日志模块。如果它不可用,我想用一个虚拟对象代替它,而不是提出一个ImportError 以下是当前执行此操作的代码: try: import logger except ImportError: print 'Couldn\'t load logger' class DummyLogger(object): def __init__(self): pass def log(self,

我正在我的项目中使用一个自定义日志模块。如果它不可用,我想用一个虚拟对象代替它,而不是提出一个
ImportError

以下是当前执行此操作的代码:

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

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

    logger = DummyLogger()

我认为这不是一个优雅的解决方案。当然可以,但不太好。有更好的方法吗?

我将把虚拟实现放在一个单独的模块中,称为
dummy\u logger
,并编写:

try:
    import logger
except ImportError:
    import dummy_logger as logger
我曾经使用JSON解析器完成过这项工作:

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

您可以很容易地使其更加简洁:

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

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

请注意,即使在您当前的版本中,空的
\uuuu init\uuuu
也应该被删除——它没有任何价值。

为什么它不可用?@Arashssaidi,我的程序是一个图像处理管道。它拍摄图像,对其进行处理,并保存结果。另外,我有一个脚本来训练我在内部使用的分类器。在将原始数据输入分类器之前,该脚本需要对原始数据进行一些预处理。预处理例程在我所说的模块中。该模块位于主项目的子目录中,因此当我运行主程序时,一切正常。当我运行培训时,模块没有看到文件系统中高于一级的记录器。谢谢,这正是我一直在寻找的。您还可以将
@classmethod
替换为
@staticmethod
,以摆脱
cls
参数。在比我更有序的环境中,这将是一个完美的解决方案。不幸的是,这仍然需要一个外部依赖,所以这不是100%的防弹。我对你的答案投了赞成票,但接受了@AlexMartelli的答案。