Python:仅在包存在时定义函数

Joh*_*ohn 8 python

如果包存在,是否可以告诉Python 2.7仅解析函数定义?

我有一个在多台机器上运行的脚本.脚本中定义了一些非常好的函数,但脚本执行的核心操作不需要这些函数.运行脚本的某些机器没有该函数导入的软件包(并且无法在其上安装软件包).目前,我必须在将repo克隆到这些机器上之前注释掉函数定义.另一种解决方案是维持两个不同的分支,但这更加乏味.有没有一种解决方案可以防止我们在推送之前不断注释掉代码?

调用函数时已有解决方案,例如:

try:
    someFunction()
except NameError:
    print("someFunction() not found.")
Run Code Online (Sandbox Code Playgroud)

Wan*_*uta 11

函数定义和导入只是Python中的代码,与其他代码一样,您可以将它们包装在try:

try:
    import bandana
except ImportError:
    pass  # Hat-wearing functions are optional
else:
    def wear(hat):
        bandana.check(hat)
        ...
Run Code Online (Sandbox Code Playgroud)

wear仅在bandana模块可用时才会定义该功能.

这是否是一个好主意取决于你 - 我认为在你自己的脚本中会很好,但你可能不想在其他人会使用的代码中这样做.另一个想法可能是做这样的事情:

def wear(hat):
    try:
        import bandana
    except ImportError:
        raise NotImplementedError("You need the bandana package to wear hats")
    else:
        bandana.check(hat)
        ...
Run Code Online (Sandbox Code Playgroud)

这样可以更清楚地说明为什么不能使用该wear功能.