import warnings warnings.warn(message, category=None, stacklevel=1, source=None)
message
- строка предупреждения,category=None
- категория предупреждения,stacklevel=1
- используется функциями-обертками,source=None
- уничтоженный объект.Функция warn()
модуля warnings
выдает предупреждение или вызывает исключение, согласно настройкам фильтра предупреждений.
Аргумент category
, если он указан, должен быть классом категории предупреждения. По умолчанию используется UserWarning
.
В качестве альтернативы, message
может быть экземпляром Warning
, в этом случае категория аргумент category
будет игнорироваться и будет использоваться message.__class__
. В этом случае текст сообщения будет str(message)
.
Функция warnings.warn()
создает исключение, если конкретное выданное предупреждение заменяется ошибкой с помощью фильтра предупреждений.
Аргумент stacklevel
может использоваться функциями-обертками, написанными на Python, например:
def deprecation(message): warnings.warn(message, DeprecationWarning, stacklevel=2)
Это заставляет предупреждение ссылаться на функцию, которая вызывает deprecation()
, а не к самому функцию deprecation()
, так как последняя будет игнорировать цель предупреждающего сообщения.
Источник source
, если он указан, является уничтоженным объектом, который выдал исключение ResourceWarning
.
import warnings # определим класс в которым будем предупреждать # что метод 'old_method' считается устаревшим class MyClass: def __init__(self): self.text = "Пример WarnExample" def old_method(self): # Выводим предупреждение, что метод устаревший warnings.warn( "This is deprecated, use new_method() instead", DeprecationWarning ) print ('Это старый.', self.text) def new_method(self): print ('Это новый метод.', self.text) # установим фильтр предупреждений в 'default' >>> warnings.simplefilter('default') >>> example = MyClass() >>> example.old_method() # test.py:11: DeprecationWarning: This is deprecated, use new_method() instead # DeprecationWarning # Это старый. Пример WarnExample # установим фильтр предупреждений в 'error' >>> warnings.simplefilter('error') >>> example.old_method() # Traceback (most recent call last): # File "test.py", line 24, in <module> # e.old_method() # File "test.py", line 11, in old_method # DeprecationWarning # DeprecationWarning: This is deprecated, use new_method() instead