Стиль кодирования (PEP8) — ошибки на уровне модуля

Определение слова "Дандер" (Dдвойная оценка ниже): http://www.urbandictionary.com/define.php?term=Дандер


У меня есть вопрос по размещению «дандеров» уровня модуля (например, __all__, __version__, __author__ и т. д.) в коде Python.

Этот вопрос возник у меня, когда я читал PEP8 и видел этот вопрос о переполнении стека.

Принятый ответ гласит:

__author__ — это глобальная «переменная», поэтому она должна отображаться под импортом.

Но в разделе PEP8 имена dunder на уровне модуля Прочитал следующее:

"Dunders" уровня модуля (т. е. имена с двумя начальными и двумя конечными символами подчеркивания), такие как __all__ , __author__ , __version__ и т. д., должны быть помещены после строки документации модуля, но перед любыми операторами импорта, за исключением __future__ imports. Python требует, чтобы будущие импорты появлялись в модуле перед любым другим кодом, кроме строк документации.

Авторы также приводят пример кода:

"""This is the example module.

This module does stuff.
"""

from __future__ import barry_as_FLUFL

__all__ = ['a', 'b', 'c']
__version__ = '0.1'
__author__ = 'Cardinal Biggles'

import os
import sys

Но когда я помещаю это в PyCharm, я вижу это предупреждение (также см. Скриншот):

PEP8: импорт уровня модуля не в верхней части файла

«PyCharm

Вопрос. Как правильно хранить эти переменные с двойным подчеркиванием?


person linusg    schedule 19.08.2016    source источник
comment
PEP 8 — это живой документ. Учтите, что раньше на эту тему можно было молчать.   -  person Martijn Pieters    schedule 19.08.2016
comment
@MartijnPieters - Есть ли шанс увидеть, когда раздел был добавлен/изменен?   -  person linusg    schedule 19.08.2016


Ответы (1)


Недавно PEP 8 был обновлен, чтобы указать местоположение перед импортом. См. редакция cf8e888b9555, принятая 7 июня 2016 г.:

Расслабьтесь __all__ место.

Соберите все дандеры уровня модуля в одном месте и удалите избыточную информацию о версии.

Закрывается № 27187. Патч от Яна Ли.

Текст был дополнительно обновлен на следующий день с учетом предупреждения from __future__ import ....

Исправление ссылается на проблему №27187, которая, в свою очередь, ссылается на эта pycodestyle проблема, где было обнаружено, что PEP 8 неясен.

До этого изменения, поскольку не было четких указаний по глобальным dunder на уровне модуля, поэтому PyCharm и другой ответ были правильными в то время. Я не уверен, как PyCharm реализует свои проверки PEP 8; если они используют проект pycodestyle (де-факто средство проверки стиля Python), то я уверен, что это будет исправлено автоматически. . В противном случае, возможно, сообщите им об ошибке, чтобы увидеть, как это исправлено.

person Martijn Pieters    schedule 19.08.2016
comment
Вау, так быстро и четко. Примет этот ответ через девять (почему так долго?) минут :) Заметит ли кто-нибудь это изменение и обновит поведение чекера PEP8 в следующий раз? - person linusg; 19.08.2016
comment
@linusg: проблема была поднята проектом pycodestyle, поэтому я уверен, что она будет обновлена. Сообщите об ошибке в PyCharm, если хотите, чтобы она была там исправлена. - person Martijn Pieters; 19.08.2016
comment
В ближайшие дни я проведу дополнительные исследования, чтобы узнать, как проверки PEP8 выполняются в PyCharm, и в конечном итоге зарегистрирую ошибку. Тогда я отредактирую свой вопрос. - person linusg; 20.08.2016
comment
@AXO: это просто обман github.com/PyCQA/pycodestyle/issues/394 - person Martijn Pieters; 22.01.2017