New submission from Zac Hatfield-Dodds <[email protected]>:
Many pytest users would like a concise way to either suppress warnings, or
convert them to errors [1]. The current best approach is:
with warnings.catch_warnings():
warnings.simplefilter("ignore") # or "error"
but even this becomes tediously verbose when repeated in hundreds of tests
(which I suspect is responsible for many misuses of `pytest.raises()`). Since
these two functions take disjoint arguments [2], I propose allowing
catch_warnings() to accept arguments for simplefilter() and forward them on:
with warnings.catch_warnings("ignore"): # or "error"
I have a quick implementation at [3] which I can finish if the idea is
acceptable. Although I don't have a concrete use-case for more than the
'action' and 'category' arguments, forwarding all rather than some makes the
semantics very simple.
I'd emphasize again that this is very much a convenience-focussed change: I
estimate that 95% of all uses will pass only `action="error"` or
`action="ignore"`. Supporting a concise and simple interface for this seems
worth the small complication to the design of the warnings module.
[1] see e.g. https://github.com/pytest-dev/pytest/issues/9404 for a long thread
[2] unlike `filterwarnings()`, which has a `module=` argument which would
collide with `catch_warnings()`
[3]
https://github.com/python/cpython/compare/main...Zac-HD:zac-hd/one-line-catch-warnings
----------
components: Library (Lib)
messages: 415647
nosy: Zac Hatfield-Dodds
priority: normal
severity: normal
status: open
title: Convenient `simplefilter()` in `warnings.catch_warnings()`
type: enhancement
versions: Python 3.11
_______________________________________
Python tracker <[email protected]>
<https://bugs.python.org/issue47074>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com