Как подавить ImportWarning в скрипте Python unittest
В данный момент я запускаю unittest скрипт, который успешно проходит различные указанные тесты с нытьем ImportWarning сообщение в консоли:
...../lib/python3.6/importlib/_bootstrap.py:219: ImportWarning: can't resolve package from __spec__ or __package__, falling back on __name__ and __path__
  return f(*args, **kwds)
....
----------------------------------------------------------------------
Ran 7 tests in 1.950s
OK
Скрипт запускается с этой основной функцией:
if __name__ == '__main__':
    unittest.main()
Я читал, что предупреждения могут быть превзойдены, когда скрипт вызывается следующим образом:
python  -W ignore:ImportWarning -m unittest testscript.py
Однако есть ли способ указать это предупреждение игнорирования в самом скрипте, чтобы мне не приходилось вызывать -W ignore:ImportWarning каждый раз, когда testscript бежать?
Заранее благодарю.
2 ответа:
Чтобы программно предотвратить появление таких предупреждений, измените код таким образом, чтобы:
import warnings if __name__ == '__main__': with warnings.catch_warnings(): warnings.simplefilter('ignore', category=ImportWarning) unittest.main()
У меня была та же проблема, и запуск моего unittest сценария с оператором
warnings.simplefilter(), как описано Nels, не сработал для меня. Согласно этому источнику , это происходит потому, что:Этот же источник рекомендует обновить фильтр внутри каждой тестовой функции, либо непосредственно, либо с помощью элегантного декоратора. Более простым решением является определение фильтра предупреждений внутри метода unittest[...] начиная с Python 3.2, модуль unittest был обновлен для использования фильтра по умолчанию модуля warnings при выполнении тестов, и [...] сбрасывает фильтр по умолчанию перед каждым тестом , что означает, что любое изменение, которое вы можете подумать, что вы делаете scriptwide, используя предупреждения.simplefilter ("игнорировать") на начало вашего сценария переопределяется между каждым тестом.
setUp(), который запускается непосредственно перед каждым тестом.import unittest class TestSomething(unittest.TestCase): def setUp(self): warnings.simplefilter('ignore', category=ImportWarning) # Other initialization stuff here def test_a(self): # Test assertion here. if __name__ == '__main__': unittest.main()