在Python中检查模块而不使用异常
发布时间:2020-12-20 11:11:27 所属栏目:Python 来源:网络整理
导读:我可以在 Python中检查一个模块,例如: try: import some_moduleexcept ImportError: print "No some_module!" 但我不想使用try / except.有没有办法实现这个目标? (它应该适用于Python 2.5.x.) 注意:不使用try / except的原因是任意的,这只是因为我想知道
我可以在
Python中检查一个模块,例如:
try: import some_module except ImportError: print "No some_module!" 但我不想使用try / except.有没有办法实现这个目标? (它应该适用于Python 2.5.x.) 注意:不使用try / except的原因是任意的,这只是因为我想知道是否有办法在不使用异常的情况下测试它. 解决方法
执行请求需要诡计(并且一个raise语句实际上是不可避免的,因为它是PEP 302中指定的唯一方式,导入钩子说“我不处理此路径项”!),但是以下将避免任何尝试/除外:
import sys sentinel = object() class FakeLoader(object): def find_module(self,fullname,path=None): return self def load_module(*_): return sentinel def fakeHook(apath): if apath == 'GIVINGUP!!!': return FakeLoader() raise ImportError sys.path.append('GIVINGUP!!!') sys.path_hooks.append(fakeHook) def isModuleOK(modulename): result = __import__(modulename) return result is not sentinel print 'sys',isModuleOK('sys') print 'Cookie',isModuleOK('Cookie') print 'nonexistent',isModuleOK('nonexistent') 这打印: sys True Cookie True nonexistent False 当然,这些在现实生活中为了避免完全正常的尝试/除外的无意义目的是荒谬的长度,但它们似乎满足了所提出的要求(并且可以有希望提示Python-Wizards想要开始他们自己的研究 – 确切地了解所有这些代码如何以及为什么按要求工作实际上是有益的,这就是为什么一旦我没有提供详细的解释和URL ;-). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |