在Python中,仅仅导入一些东西以便以更方便的方式公开它被认为是不好的做法?

时间:2011-06-20 01:12:42

标签: import python disqus

如果没有一个例子,这可能没有意义。我在我的Django应用程序中使用python-disqus,并且我将它包装起来以便更好地将其与我的应用程序的其余部分分离。

我有一个文件disqus.py,它导入disqusapi并定义了许多辅助函数。在应用程序代码的其他地方,我可以简单地添加from mango import disqus,但在一些地方,有必要捕获在进行API调用时可能引发的异常。这意味着我被迫做了类似的事情:

from disqusapi import APIError
from mango import disqus

try:
    disqus.thread.fetch(1)
except APIError, error:
    logger.warn('Disqus API error: %s' % error)

如果我要在disqus.py的顶部导入APIError,我可以写一下:

from mango import disqus

try:
    disqus.thread.fetch(1)
except disqus.APIError, error:
    logger.warn('Disqus API error: %s' % error)

Pyflakes抱怨未使用的导入,但这似乎是一件合理的事情。我应该高兴地在这里忽略Pyflakes,还是我错过了一个更好的选择?

要清楚,我不需要以任何方式修改disqusapi.APIError,因此不需要子类化。

3 个答案:

答案 0 :(得分:3)

  

在Python中它被认为是坏的   练习将某些东西单独导入   以更方便的方式揭露它?

简短回答:不。

答案很长,如果您正在编写一个包装器,以使您自己的代码更简单,更容易理解,您可以做任何您喜欢的事情。如果要包装其他代码,或者导入模块并将其子类化,或导入模块,并更改其方法。

如果您正在为其他人编写代码,您可能需要添加注释来解释您正在做的事情。如果只是为了你自己,这一切都很好。

答案 1 :(得分:3)

__init__.py或包装中充满了明显“未使用”的进口是相当普遍的。我认为pyflakes未使用的想法似乎有点简单,因为可以清楚地看到这个导入使用 - 只是在另一个模块中。

如果你不得不忽略它,这很烦人。也许pyflakes有某种pragma来覆盖这种行为。

它的好风格是否真的取决于应用程序的结构。我认为你可以为双方提出论据

答案 2 :(得分:0)

如果您需要使用某些东西并且它不会在您的命名空间中发生碰撞,那么它from x import y就不合适了。

但是,为了自我记录,您可能更喜欢第二种选择。如果有人正在阅读您的代码,他们可能不知道错误与哪个API相关,但是从命名空间中删除它可以避免任何歧义。