Python:仅当包存在时定义函数
如果包存在,是否可以告诉Python2.7只解析函数定义 我有一个在多台机器上运行的脚本。脚本中定义了一些函数,这些函数非常好用,但脚本执行的核心操作并不需要这些函数。运行脚本的某些计算机没有函数导入的包(并且无法在其上安装该包)。目前,在将repo克隆到那些机器上之前,我必须注释掉函数定义。另一个解决方案是维护两个不同的分支,但这更加繁琐。有没有一种解决方案可以防止我们在推之前不断地注释掉代码 调用函数的时间已经有了解决方案,例如:Python:仅当包存在时定义函数,python,Python,如果包存在,是否可以告诉Python2.7只解析函数定义 我有一个在多台机器上运行的脚本。脚本中定义了一些函数,这些函数非常好用,但脚本执行的核心操作并不需要这些函数。运行脚本的某些计算机没有函数导入的包(并且无法在其上安装该包)。目前,在将repo克隆到那些机器上之前,我必须注释掉函数定义。另一个解决方案是维护两个不同的分支,但这更加繁琐。有没有一种解决方案可以防止我们在推之前不断地注释掉代码 调用函数的时间已经有了解决方案,例如: try: someFunction() except
try:
someFunction()
except NameError:
print("someFunction() not found.")
函数定义和导入只是Python中的代码,与其他代码一样,您可以将它们包装在
try
:
try:
import bandana
except ImportError:
pass # Hat-wearing functions are optional
else:
def wear(hat):
bandana.check(hat)
...
仅当bandana
模块可用时,这将定义wear
功能
这是否是一个好主意取决于您——我认为在您自己的脚本中可以,但您可能不希望在其他人将使用的代码中这样做。另一个想法可能是这样做:
def wear(hat):
try:
import bandana
except ImportError:
raise NotImplementedError("You need the bandana package to wear hats")
else:
bandana.check(hat)
...
这将更清楚地说明为什么不能使用
磨损功能。稍微改进的解决方案如下:
在文件头中:
try:
# Optional dependency
import psutil
except ImportError as e:
psutil = e
稍后在函数开头或\uuuuu init\uuuu
方法中:
if isinstance(psutil, ImportError):
raise psutil
优点:当您访问可选功能时,会收到原始异常消息。就像您只需导入psutil一样,为什么需要注释掉函数定义?如果这些函数不是必需的,但您还是定义了它们,这真的是个问题吗?回答得好!一旦我定义了它,我就可以在任何地方用isinstance()确认它,这样我就不需要调用try。。。一次又一次地捕捉…
。