gpt4 book ai didi

python - 在不使用异常的情况下检查 Python 中的模块

转载 作者:太空宇宙 更新时间:2023-11-03 13:24:54 25 4
gpt4 key购买 nike

我可以检查 Python 中的模块是否执行以下操作:

try:
import some_module
except ImportError:
print "No some_module!"

但我不想使用 try/except。有没有办法做到这一点? (它应该适用于 Python 2.5.x。)

注意:不使用 try/except 的原因是任意的,只是因为我想知道是否有一种方法可以在不使用异常的情况下进行测试。

最佳答案

执行请求需要技巧(并且一个 raise 语句实际上是不可避免的,因为它是 PEP 302 中指定的唯一方式,用于导入 Hook 说“我不处理使用此路径项"!),但以下将避免任何 try/except:

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

当然,在现实生活中,为了避免完全正常的 try/except 的毫无意义的目的,这些都是荒谬的长度,但它们似乎满足提出请求(并有望促使 Python 奇才崇拜者开始他们自己的研究——确切地找出所有这些代码如何以及为什么按要求工作实际上是有启发性的,这就是为什么我这一次不提供详细解释的原因和网址;-)。

关于python - 在不使用异常的情况下检查 Python 中的模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1224585/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com