【发布时间】:2018-01-28 08:13:02
【问题描述】:
问题
在python中遇到ImportError,是直接报错让用户安装,还是使用import chain?
说明
我在尝试使用 lxml 包解析 python 中的 xml 文件时遇到了这个问题。
在其官方文档中,它说:
如果您的代码仅使用 ElementTree API 并且不依赖于任何特定于 lxml.etree 的功能,您还可以使用以下导入链(的任何部分)作为原始 ElementTree 的后备:
try:
from lxml import etree
print("running with lxml.etree")
except ImportError:
try:
import xml.etree.cElementTree as etree
print("running with cElementTree on Python 2.5+")
except ImportError:
...
在我看来,导入替换是一个坏主意,因为:
如果你可以导入另一个库作为替代,它可能没有 lxml 的所有方法,那么 你的所有脚本只能基于所有包中的那些可用方法。
那么导入最强大的包(例如这里的lxml)就没有意义了,我们可以直接导入功能最少的包,并节省大量代码。或者如果我们以后想使用额外的方法,我们应该直接引发 ImportError。
但是,正如Error handling when importing modules 中的回答,我发现这种方法似乎在 python 编程中经常使用:
根据在运行时导入的库来定义多级功能很有用。
但在我看来,多层次的功能只能通过不断检查是否导入了一个库来实现,这使得整个代码变得复杂和丑陋。
结果,我只是想知道为什么人们有时会使用这样的结构,而不是直接引发错误?
【问题讨论】:
标签: python error-handling python-import