3

如果没有例子,这可能没有意义。我在我的 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)

如果我要APIError在 disqus.py 的顶部导入,我可以改为:

from mango import disqus

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

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

需要明确的是,我不需要以disqusapi.APIError任何方式进行修改,因此子类化是不必要的。

4

3 回答 3

3

在 Python 中,仅导入某些内容以更方便地公开它是否被认为是不好的做法?

简短的回答:没有。

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

如果您正在为其他人编写代码,您可能需要添加注释来解释您在做什么。如果只是为了自己,那一切都好。

于 2011-06-20T01:21:16.253 回答
3

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

如果您不得不忽略它,那会很烦人。也许 pyflakes 有某种编译指示可以覆盖这种行为。

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

于 2011-06-20T01:39:33.957 回答
0

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

但是,出于自我文档的考虑,您可能更喜欢第二种选择。如果有人正在阅读您的代码,他们可能不知道错误与哪个 API 相关,但从命名空间中提取它可以避免任何歧义。

于 2011-06-20T01:21:09.850 回答