哪一个是首选,从定义符号的模块或直接导入的模块导入?

时间:2018-03-26 07:43:26

标签: python

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

a.py

def A(Exception):
    pass

def funA():
    raise A

b.py

from a import A, funA

def funB():
    try:
        funA()
    except A as e:
        # some additional handling
        raise

c.py

import b

# Which of the following is preferred?
# 1. 
try:
    funB():
except a.A:
    # do something

# 2. 
try:
    funB():
except b.A:
    # do something

1 个答案:

答案 0 :(得分:1)

我推荐前者,因为:

  • 后者误导了该功能的起源。
  • 使用后者会降低可维护性,因为在查找函数的定义时需要遍历b - 只是发现它位于a。
  • 此外,如果您决定放弃模块B并直接导入A,您的代码将会中断。

然而,在一天结束时,它归结为您和您的团队喜欢的内容。无论您选择什么,我建议您与选择保持一致。