Предположим, у меня есть файл A.py
только с следующим содержанием:предупреждения Поймайте импорта в Python
import warnings warnings.warn("A is deprecated", DeprecationWarning)
Я хочу, чтобы поймать это предупреждение, когда я импортировать и утверждать, что это DeprecationWarning
. В настоящее время я делаю следующее:
import warnings with warnings.catch_warnings(record=True) as w: import A
и пытаюсь утверждать, используя что-то вроде assert_equal(w[0].category, DeprecationWarning)
, но это показывает, что w
пуст. Думаю, он не поймает предупреждение. Есть ли другой способ сделать это?
EDIT: Я забыл добавить, что я пробовал его с warnings.simplefilter("always")
, но предупреждения не было.
EDIT 2: Он может иметь какое-то отношение к уровням предупреждения. [смотреть комментарии]
EDIT 3: Пробовал его с различными stacklevel
s - 0, 1, 2, 3. Без эффекта: |
Если вы используете [ 'unittest'] (https://docs.python.org/3/library/unittest.html), есть [' unittest.TestCase.assertWarns() '] (HTTPS: //docs.python .org/3/библиотека/unittest.html # unittest.TestCase.assertWarns). –
Каков ваш уровень предупреждения? Я считаю, что 'DeprecationWarning' [игнорируется по умолчанию] (https://docs.python.org/3.4/library/warnings.html#default-warning-filters). Попробуйте вызвать 'warnings.simplefilter ('default')' перед 'catch_warnings' (или вызвать' python -Wd' для запуска вашего скрипта), как описано [здесь] (https://docs.python.org/3.4/library/warnings .html # обновление-кода для-новых-версий-оф-питон). См. Полный пример [здесь] (https://docs.python.org/3.4/library/warnings.html#testing-warnings). –
Извините, я забыл добавить, что я пробовал его с помощью 'warnings.simplefilter ('always')', но предупреждение не записывалось, будет «ИЗМЕНИТЬ» вопрос. –