当某些模块无法导入时,库的行为方式是否有任何标准做法?它应该只是让异常发生,还是应该捕获它并使用适当的信息优雅地退出?
例如我有这样的事情:
try:
from argparse import ArgumentParser
except ImportError:
print('fathom library requires python 3.2 or argparse package.')
是更好还是更糟?
当某些模块无法导入时,库的行为方式是否有任何标准做法?它应该只是让异常发生,还是应该捕获它并使用适当的信息优雅地退出?
例如我有这样的事情:
try:
from argparse import ArgumentParser
except ImportError:
print('fathom library requires python 3.2 or argparse package.')
是更好还是更糟?
图书馆应该总是提出ImportError
而不是退出;程序可能希望有条件地包含它(可能在它不可用时替换它)。
如果一个较低级别的模块加注ImportError
,最好的办法是重新加注,并附上额外的信息。
如果可以,将模块与您的包一起分发,然后按照此模式选择您正在使用的模块(首选 Python 3.x,默认为您提供的模块)。
如果不是,这通常是可以的,只要您还确保这不会在以后默默地导致更模糊的异常(即,确保您在结束时进行清理,except
并且很可能重新抛出此异常或扔你自己的)。
这是一个口味问题。不过我喜欢你的方法。它清晰而干净。