Python 从定义了符号的模块导入还是从直接导入的模块导入,哪个是首选?

Python 从定义了符号的模块导入还是从直接导入的模块导入,哪个是首选?,python,Python,在下面的示例中,符号A在模块A中定义,并在b中导入。模块c导入模块b。它应该直接从模块A访问A还是从B(它直接导入的模块)获取A?我考虑的是后者,这样我就不必担心删除对A的直接引用,如果有一天我从模块c中删除对b的引用 a、 派克 b、 派克 c、 派克 我推荐前者是因为: 后者对函数的起源具有误导性 使用后者会降低可维护性,因为在查找函数的定义时需要遍历b,结果发现它位于a中 此外,如果您决定删除模块B并直接导入A,您的代码将中断 然而,归根结底,这取决于你和你的团队喜欢什么。无论您选择什

在下面的示例中,符号A在模块A中定义,并在b中导入。模块c导入模块b。它应该直接从模块A访问A还是从B(它直接导入的模块)获取A?我考虑的是后者,这样我就不必担心删除对A的直接引用,如果有一天我从模块c中删除对b的引用

a、 派克

b、 派克

c、 派克


我推荐前者是因为:

  • 后者对函数的起源具有误导性
  • 使用后者会降低可维护性,因为在查找函数的定义时需要遍历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