#python #nose #skbio
#python #nose #skbio
Вопрос:
У меня возникли некоторые проблемы с фильтрацией предупреждений в тестах python при использовании nosetests
. Я бы хотел, чтобы мой вызов warn.filterwarnings
был локальным только для одного файла, но вместо этого, если какой-либо из файлов, которые я тестирую с nosetests
помощью вызовов warn.filterwarnings
, предупреждения фильтруются во всех тестах. Например (из базы кода scikit-bio), skbio/math/diversity/beta/tests/test_base.py
не имеет вызова warn.filterwarnings
, поэтому, как и ожидалось, если во время тестов генерируется предупреждение, оно выводится на экран:
$ nosetests skbio/math/diversity/beta/tests/test_base.py
../Users/caporaso/Dropbox/code/skbio/skbio/math/diversity/beta/base.py:89: UserWarning: pw_distances_from_table is deprecated. In the future (tentatively scikit-bio 0.2.0), pw_distance will take a biom.table.Table object and this function will be removed. You will need to update your code to call pw_distances at that time.
warn("pw_distances_from_table is deprecated. In the future (tentatively "
...
----------------------------------------------------------------------
Ran 5 tests in 0.017s
OK
Однако в skbio/core/alignment/tests/test_pairwise.py
, есть вызов warn.filterwarnings
. Если я запускаю эти тесты раньше skbio/math/diversity/beta/tests/test_base.py
, приведенное выше предупреждение не выводится:
$ nosetests skbio/core/alignment/tests/test_pairwise.py skbio/math/diversity/beta/tests/test_base.py
...................
----------------------------------------------------------------------
Ran 19 tests in 0.056s
OK
Я бы хотел, чтобы предупреждение skbio/math/diversity/beta/tests/test_base.py
было напечатано, даже если other warn.filterwarnings
вызывается из других тестовых файлов. На практике я в конечном итоге отфильтрую и это, но я хочу знать, есть ли другие предупреждения, которые не были обнаружены тестами в другом месте в моем наборе тестов.
Ответ №1:
В идеале вы хотите использовать менеджеры conext для временного их подавления.
Комментарии:
1. Спасибо, это сработало. В частности, я удалил все вызовы
warn.filterwarnings
из моего набора тестов, а затем перенес вызовы, которые вызывали предупреждения, как предложено в отправленной вами ссылке.