Разница между предупреждением об устаревании, предупреждением об устаревании и предупреждением о будущем - PullRequest
0 голосов
/ 27 марта 2019

В чем разница между DeprecationWarning, PendingDeprecationWarning и FutureWarning? В документации Python 3 я видел, что есть разница в терминах целевой «аудитории», особенно я не понимаю разницу между «разработчиками» и «конечными пользователями». Это понятие немного размыто для меня. Кто-нибудь может объяснить и привести примеры?

Я составил небольшую таблицу, чтобы обобщить варианты использования:

+---------------+---------------------------+---------------+
|               | Developers                | End Users     |
+---------------+---------------------------+---------------+
| Now           | DeprecationWarning        | ???           |
| In the future | PendingDeprecationWarning | FutureWarning |
+---------------+---------------------------+---------------+

Есть ли «предупреждение об устаревании» для конечных пользователей?

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

1 Ответ

1 голос
/ 27 марта 2019

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

Конкретное описание, на которое вы ссылаетесь, было изменением в Python 3.7. Полное описание изменения можно прочитать по адресу https://www.python.org/dev/peps/pep-0565/,, но вот особенно важный раздел с примерами использования:

Это даст следующие три различные категории предупреждения обратной совместимости с тремя разными целевыми аудиториями:

  • PendingDeprecationWarning: по умолчанию скрыто для всего кода. Предполагаемая аудитория - разработчики Python, которые активно заинтересованы в обеспечении будущей совместимости своего программного обеспечения (например, профессиональные разработчики приложений Python с конкретными обязательствами по поддержке).
  • DeprecationWarning: по умолчанию сообщается для кода, который запускается непосредственно в модуле __main__ (поскольку такой код считается относительно маловероятным с выделенным набором тестов), но по умолчанию скрыт для кода в других модулях. Предполагаемая аудитория - разработчики Python, которые рискуют обновить свои зависимости (включая обновления до самого Python), нарушив свое программное обеспечение (например, разработчики, использующие Python для создания сценариев в средах, где кто-то еще контролирует время обновления зависимостей).
  • FutureWarning: сообщается по умолчанию для всего кода. Предполагаемая аудитория - пользователи приложений, написанных на Python, а не другие разработчики Python (например, предупреждение об использовании устаревшей настройки в формате файла конфигурации).

Я не думаю, что ваша таблица достаточно точна - FutureWarning, насколько я понимаю, должно быть для вещей, которые устарели сейчас . Как я понимаю, DeprecationWarning означает «измените ваш код сейчас, или он скоро сломается», PendingDeprecationWarning означает «вам придется что-то изменить в конце концов», а FutureWarning означает «что-то таким, каким вы» Это неправильно, и может привести к сбою позже. "

FutureWarning также используется, чтобы предупредить вас, что в будущем обновлении не будет происходить то же самое, даже если они будут действительным кодом. Это может быть актуально как для разработчиков, так и для пользователей. Например, многие из FutureWarning, которые я видел на практике, - это вещи, в которых значение какой-то вспомогательной функции может измениться (например, == для двух массивов возвращает массив True / False для каждого элемента или делает это вернуть единственное значение True / False, True только в том случае, если все элементы равны? Когда numpy хочет изменить это, они создают FutureWarning)

При разработке вашей библиотеки обязательно используйте эти или их подклассы. Люди, пишущие код с использованием вашей библиотеки, ожидают, что их интеграционные тесты выдадут DeprecationWarning s, если есть потенциальная проблема (точнее, инструменты тестирования могут специально их искать).

...