Python 从定义了符号的模块导入还是从直接导入的模块导入,哪个是首选?
在下面的示例中,符号A在模块A中定义,并在b中导入。模块c导入模块b。它应该直接从模块A访问A还是从B(它直接导入的模块)获取A?我考虑的是后者,这样我就不必担心删除对A的直接引用,如果有一天我从模块c中删除对b的引用 a、 派克 b、 派克 c、 派克Python 从定义了符号的模块导入还是从直接导入的模块导入,哪个是首选?,python,Python,在下面的示例中,符号A在模块A中定义,并在b中导入。模块c导入模块b。它应该直接从模块A访问A还是从B(它直接导入的模块)获取A?我考虑的是后者,这样我就不必担心删除对A的直接引用,如果有一天我从模块c中删除对b的引用 a、 派克 b、 派克 c、 派克 我推荐前者是因为: 后者对函数的起源具有误导性 使用后者会降低可维护性,因为在查找函数的定义时需要遍历b,结果发现它位于a中 此外,如果您决定删除模块B并直接导入A,您的代码将中断 然而,归根结底,这取决于你和你的团队喜欢什么。无论您选择什
我推荐前者是因为:
- 后者对函数的起源具有误导性
- 使用后者会降低可维护性,因为在查找函数的定义时需要遍历b,结果发现它位于a中
- 此外,如果您决定删除模块B并直接导入A,您的代码将中断
然而,归根结底,这取决于你和你的团队喜欢什么。无论您选择什么,我建议您与选择保持一致。谁拥有代码?'A'可能是外部库,例如,在我的情况下,它是redis模块。代码的用户可以修改B和C。
def A(Exception):
pass
def funA():
raise A
from a import A, funA
def funB():
try:
funA()
except A as e:
# some additional handling
raise
import b
# Which of the following is preferred?
# 1.
try:
funB():
except a.A:
# do something
# 2.
try:
funB():
except b.A:
# do something