我正在维护一些Python包,并且在不完全满足依赖性的系统上,由于全局范围导入而失败的功能可能会失败:
import numpy as np
def lala(in):
out = max(in)
return out
def fufu(in):
out = np.mean(in)
return out
所以例如在这里我不能使用lala()
如果我没有numpy,如果lala不使用numpy那么。
当然,理想情况下,依赖关系会被正确管理,但是,如果函数只有在失败时才会失败,它会产生更强大的包。
为什么在功能范围内几乎从未进行过导入?这个原因只是减少了行数吗?
答案 0 :(得分:1)
有没有理由为什么几乎从未在功能范围内进行过导入?
原因是您通常希望尽快检测到错误。函数只能在一段时间后调用,因此使用函数内部的导入可以使出现的程序起作用,但只能在运行时的某个时刻失败。这些失败在经过长时间的计算或在客户的网站上生产时会导致程序崩溃时尤其是坏消息,最好避免使用。
如果该功能设计为可选,则上述内容不适用。在这种情况下,在函数内部导入是非常合适的,可能会捕获ImportError
并将其作为业务异常重新加载。