捕获ImportError但不捕获嵌套导入错误

时间:2016-01-20 18:04:43

标签: python python-import importerror

问题:

  1. 是否有一种可靠的方法来区分当前调用__import__的导入错误与嵌套导入错误?
  2. 除了try语句之外,还有另一种检查模块存在性和可访问性的可靠方法吗?
  3. 故事:

    我在python2.7/unittest/loader.py中找到了此代码。

    parts = name.split('.')
    if module is None:
        parts_copy = parts[:]
        while parts_copy:
            try:
                module = __import__('.'.join(parts_copy))
                break
            except ImportError:
                del parts_copy[-1]
                if not parts_copy:
                    raise
    

    它尝试通过它name导入模块。如果失败,则会从parts列表中删除最后一部分并再次尝试,直到列表为空。

    代码依赖于ImportError异常。它基于以下假设:异常意味着指定的name不是模块名称,而是该模块中某个对象的名称(可能是函数或类)。

    问题是嵌套导入可能会引发ImportError异常,包括我自己的模块。如果是这样,我不希望通过此代码将此错误抑制并作为正常情况处理。我想知道为什么我的代码在没有深入了解库源代码的情况下不起作用。但是这种问题使得它变得困难并浪费了开发人员的时间。我想提议更改此库,但我不确定在这种情况下什么是好的解决方案。

0 个答案:

没有答案