В Python считается ли плохой практикой импортировать что-то исключительно для более удобной демонстрации? - PullRequest
3 голосов
/ 20 июня 2011

Это, вероятно, не имеет смысла без примера. Я использую python-disqus в своем приложении Django и оборачиваю его, чтобы лучше отделить его от остальной части моего приложения.

У меня есть файл 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, поэтому подклассы не нужны.

Ответы [ 3 ]

3 голосов
/ 20 июня 2011

В Python это считается плохим практика импортировать что-то исключительно в разоблачить это в более удобной манере?

Краткий ответ: Нет.

Длинный ответ, если вы пишете обертку, чтобы сделать собственный код проще и понятнее, вы можете делать все, что захотите. Если вы хотите обернуть другой код, или импортировать модули и подклассы их, или импортировать модули, и изменить их методы.

Если вы пишете код для других людей, вы, вероятно, захотите добавить комментарии, чтобы объяснить, что вы делаете. Если это только для вас, это все хорошо.

3 голосов
/ 20 июня 2011

Обычно __init__.py или пакет полны явно "неиспользованного" импорта.Я думаю, что идея неиспользованных pyflakes кажется немного упрощенной, так как ясно видно, что этот импорт используется - просто в другом модуле.

Это раздражает, если вы просто игнорируете его,Возможно, существует какая-то прагма для pyflakes, чтобы отменить это поведение.

От того, действительно ли это хороший стиль, зависит от структуры приложения.Я думаю, что вы можете привести аргументы для обеих сторон

0 голосов
/ 20 июня 2011

Если вам нужно что-то использовать, и оно не сталкивается в вашем пространстве имен, не стоит from x import y это.

Однако вы можете предпочесть второй вариант для самодокументирования.Если кто-то читает ваш код, он может не знать, с каким API связана ошибка, но извлечение его из пространства имен позволяет избежать двусмысленности.

...