捕获导入错误,但不捕获嵌套的导入错误

2024-03-28 13:13:32 发布

您现在位置:Python中文网/ 问答频道 /正文

问题:

  1. 有没有一种健壮的方法来区分当前调用__import__的导入错误和嵌套的导入错误?你知道吗
  2. 除了try语句之外,还有其他健壮的方法来检查模块的存在性和可访问性吗?你知道吗

故事:

我在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异常可能是由包含我自己模块的嵌套导入引发的。如果是这样的话,我不希望这段代码将此错误作为正常情况加以抑制和处理。我想知道为什么我的代码没有深入研究库源代码就不能工作。但这类问题使开发变得困难,浪费了开发人员的时间。我想建议对这个库进行修改,但我不确定在这种情况下什么是好的解决方案。你知道吗


Tags: 模块方法代码nameimport列表if错误