Python 3.8中ImportError和ModuleNotFoundError有什么区别?我只是想知道有什么区别,为什么它们很重要。
ImportError
ModuleNotFoundError
gev0vcfq1#
ModuleNotFoundError是ImportError的一种:
>>> issubclass(ModuleNotFoundError, ImportError) True
它是专门在完全找不到模块时引发的。其他问题可能发生在找到文件之后,但在加载文件或定义函数的实际过程中:这将提高ImportError。对于ModuleNotFoundError,你可能做不了什么;你可以忽略它,不使用你试图在代码后面导入的模块,或者退出并修复你的环境,这样模块就能被找到。
xsuvu9jc2#
根据Python文档:当import语句在成功导入指定模块时遇到问题时,将引发ImportError。通常,这样的问题是由于无效或不正确的路径,这将在Python 3.6和更新版本中引发ModuleNotFoundError。
nom7f22z3#
TL;DR您应该捕获ModuleNotFoundError以检测软件包何时未安装。ModuleNotFoundError只有在没有找到该名称的模块时才会引发,通常是因为没有安装包。它是在python 3.6+中引入的,是ImportError的子类。ImportError在模块导入失败时引发,原因有一百万种。主要用例是检测何时安装了可选库以启用其他功能。例如,一个数据科学工具可以支持导出到excel文件,但只有在安装了excel库(xlsxwriter或openpyxl)的情况下。应用程序可以检测JIT库(cython,numba),加密库,压缩库(lz 4,zstd,snappy,brotli),导出格式(csv,excel,openXML)。您应该捕获ModuleNotFoundError以检测软件包何时未安装。如果你捕获的是ImportError而不是ModuleNotFoundError,你可能会默默地捕获并丢弃真正的错误,比如模块有bug,或者在那个python版本上不工作,或者包之间的不兼容,这些都是你通常想看到并修复的。这里有一个测试来显示一个区别:
# mylibrary.py def hello(): print("hello") # myapp.py try: from mylibrary import missingvar except ImportError: print("caught ImportError") try: from mylibrary import missingvar except ModuleNotFoundError: print("caught ModuleNotFoundError")
产出:
$ python3 myapp.py caught ImportError Traceback (most recent call last): File "/home/user/myapp.py", line 7, in <module> from mylibrary import missingvar ImportError: cannot import name 'missingvar' from 'mylibrary' (/home/user/mylibrary.py)
3条答案
按热度按时间gev0vcfq1#
ModuleNotFoundError
是ImportError
的一种:它是专门在完全找不到模块时引发的。其他问题可能发生在找到文件之后,但在加载文件或定义函数的实际过程中:这将提高
ImportError
。对于
ModuleNotFoundError
,你可能做不了什么;你可以忽略它,不使用你试图在代码后面导入的模块,或者退出并修复你的环境,这样模块就能被找到。xsuvu9jc2#
根据Python文档:
当import语句在成功导入指定模块时遇到问题时,将引发ImportError。通常,这样的问题是由于无效或不正确的路径,这将在Python 3.6和更新版本中引发ModuleNotFoundError。
nom7f22z3#
TL;DR您应该捕获
ModuleNotFoundError
以检测软件包何时未安装。ModuleNotFoundError
只有在没有找到该名称的模块时才会引发,通常是因为没有安装包。它是在python 3.6+中引入的,是ImportError
的子类。ImportError
在模块导入失败时引发,原因有一百万种。主要用例是检测何时安装了可选库以启用其他功能。例如,一个数据科学工具可以支持导出到excel文件,但只有在安装了excel库(xlsxwriter或openpyxl)的情况下。
应用程序可以检测JIT库(cython,numba),加密库,压缩库(lz 4,zstd,snappy,brotli),导出格式(csv,excel,openXML)。
您应该捕获
ModuleNotFoundError
以检测软件包何时未安装。如果你捕获的是
ImportError
而不是ModuleNotFoundError
,你可能会默默地捕获并丢弃真正的错误,比如模块有bug,或者在那个python版本上不工作,或者包之间的不兼容,这些都是你通常想看到并修复的。这里有一个测试来显示一个区别:
产出: