我有一个功能众多的模块。其中一些功能依赖于其他模块。该模块将用于某些环境中,而这些环境中不会有其他模块。在这些环境中,我希望不依赖于这些其他不可用模块的模块的功能是可用的。什么是合理的编码方式
我很高兴当一个函数的依赖性模块不满足时会出现异常,但我希望该模块可以用于其他没有依赖性问题的函数
目前,我正在考虑一个模块级函数,如下所示:
tryImport(moduleName = None):
try:
module = __import__(moduleName)
return(module)
except:
raise(Exception("module {moduleName} import error".format(
moduleName = moduleName)))
sys.exit()
这将在函数中以如下方式使用:
def function1():
pyfiglet = tryImport(moduleName = "pyfiglet")
请用句号
首先,你描述的问题表明你应该重新设计你的模块。最明显的解决方案是将它分解为一个包中的几个模块。它们中的每一个都包含一组具有公共外部依赖关系的函数。如果只知道目标计算机上可能缺少哪些依赖项,就可以轻松定义需要多少组。然后可以分别导入它们。基本上,在一个给定的环境中,你只导入你需要的东西,问题就不存在了
如果您仍然认为情况并非如此,并坚持将所有功能保留在一个模块中,那么您可以始终执行以下操作:
如何演绎环境类型取决于你。可能来自某个配置文件或环境变量。
然后你就有了这个模块中的函数。如果没有模块使用者调用函数来使用给定环境中不可用的模块,则不会出现问题。
我认为抛出自定义异常没有任何意义
NameError
在尝试访问未导入的名称时,仍将抛出异常。顺便说一下,你的sys.exit()
无论如何都不会被执行如果不想定义环境类型,仍然可以使用以下代码实现此目标:
这两个代码段都应该用于模块级,而不是函数内部
TL;博士我只想把这个模块分成几个部分。但是如果你真的要保持它的整体性,只需要使用基本的语言特性,不要通过使用
__import__
和一个专用函数来过度设计它对于您的用例,将您需要的导入放在函数中,而不是放在模块的顶部,听起来没有什么错(别担心,重新导入几乎不需要任何成本):
相关问题 更多 >
编程相关推荐