Показывать предупреждение при импорте класса в python - PullRequest
5 голосов
/ 02 марта 2020

У меня есть класс в другом модуле, и я хочу показать DeprecationWarning при импорте этого класса. Как правильно это сделать?

модуль 1 содержит -

class Test:
    pass

модуль 2 содержит -

from module1 import Test #this line should show a DeprecationWarning.

Ответы [ 4 ]

3 голосов
/ 02 марта 2020

При импорте будет выполнено определение класса, поэтому поместите туда предупреждение:

class Test:
    raise DeprecationWarning('This class is deprecated')
0 голосов
/ 02 марта 2020

Добавьте code на страницу index:

error_reporting(1);
ini_set('display_startup_errors', 0);
0 голосов
/ 02 марта 2020

Вы можете использовать [Python 3.Docs]: предупреждения - элемент управления предупреждением , который гласит ( выделение мое):

Изменено в версии 3.2 : Предупреждение об устаревании теперь игнорируется по умолчанию в дополнение к PendingDeprecationWarning .

, поэтому вам придется «вручную» включить его, иначе он не будет виден при импорте mod00 . Таким образом:

  • Предупреждение будет отображаться при импорте или выполнении модуля
  • Класс также может быть создан

mod00.py :

#!/usr/bin/env python

import warnings
warnings.filterwarnings("default", category=DeprecationWarning, module=__name__)

print("Module mod00")


class Dummy:
    warnings.warn("Dummy class is deprecated", category=DeprecationWarning, stacklevel=2)


if __name__ == "__main__":
    print("Execute module mod00")

mod01.py :

#!/usr/bin/env python

from mod00 import Dummy


if __name__ == "__main__":
    print("Execute module mod01")
    dummy = Dummy()
    print(dummy)

Вывод :

e:\Work\Dev\StackOverflow\q060486000>sopr.bat
*** Set shorter prompt to better fit when pasted in StackOverflow (or other) pages ***

[prompt]> "e:\Work\Dev\VEnvs\py_pc064_03.07.06_test0\Scripts\python.exe" -m mod00
Module mod00
e:\Work\Dev\StackOverflow\q060486000\mod00.py:9: DeprecationWarning: Dummy class is deprecated
  class Dummy:
Execute module mod00

[prompt]> "e:\Work\Dev\VEnvs\py_pc064_03.07.06_test0\Scripts\python.exe" mod00.py
Module mod00
mod00.py:9: DeprecationWarning: Dummy class is deprecated
  class Dummy:
Execute module mod00

[prompt]> "e:\Work\Dev\VEnvs\py_pc064_03.07.06_test0\Scripts\python.exe" -c "import mod00"
Module mod00
e:\Work\Dev\StackOverflow\q060486000\mod00.py:9: DeprecationWarning: Dummy class is deprecated
  class Dummy:

[prompt]> "e:\Work\Dev\VEnvs\py_pc064_03.07.06_test0\Scripts\python.exe" -m mod01
Module mod00
e:\Work\Dev\StackOverflow\q060486000\mod00.py:9: DeprecationWarning: Dummy class is deprecated
  class Dummy:
Execute module mod01
<mod00.Dummy object at 0x000001EBBC685488>
0 голосов
/ 02 марта 2020

В вашем module1.py Test классе. добавьте предупреждение в ваш метод инициализации:

import warnings


class Test:
    def __init__(self):
        warnings.warn('This class is deprecated', DeprecationWarning)

Это даст вам следующий вывод, где, если вы наведите курсор на Test, вы увидите предупреждение.

Для этого вам нужно будет инициализировать класс Test.

enter image description here

Если вы хотите отобразить предупреждение в операторе импорта, вы можете вызвать предупреждение в самом файле module1.py. Однако это произойдет для всех ваших классов в файле module1.py, если вы их импортируете.

enter image description here

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