mirror of
https://github.com/python/cpython.git
synced 2025-11-25 12:44:13 +00:00
Make warnings accept a callable for showwarnings instead of
restricting itself to just functions and methods (which allows built-in functions to be used, etc.). Closes issue #10271. Thanks to lekma for the bug report.
This commit is contained in:
parent
b05be7d936
commit
52a7d98273
2 changed files with 10 additions and 8 deletions
|
|
@ -512,12 +512,11 @@ class _WarningsTests(BaseTest):
|
|||
def test_showwarning_not_callable(self):
|
||||
with original_warnings.catch_warnings(module=self.module):
|
||||
self.module.filterwarnings("always", category=UserWarning)
|
||||
old_showwarning = self.module.showwarning
|
||||
self.module.showwarning = print
|
||||
with support.captured_output('stdout'):
|
||||
self.module.warn('Warning!')
|
||||
self.module.showwarning = 23
|
||||
try:
|
||||
self.assertRaises(TypeError, self.module.warn, "Warning!")
|
||||
finally:
|
||||
self.module.showwarning = old_showwarning
|
||||
self.assertRaises(TypeError, self.module.warn, "Warning!")
|
||||
|
||||
def test_show_warning_output(self):
|
||||
# With showarning() missing, make sure that output is okay.
|
||||
|
|
@ -547,10 +546,13 @@ class _WarningsTests(BaseTest):
|
|||
globals_dict = globals()
|
||||
oldfile = globals_dict['__file__']
|
||||
try:
|
||||
with original_warnings.catch_warnings(module=self.module) as w:
|
||||
catch = original_warnings.catch_warnings(record=True,
|
||||
module=self.module)
|
||||
with catch as w:
|
||||
self.module.filterwarnings("always", category=UserWarning)
|
||||
globals_dict['__file__'] = None
|
||||
original_warnings.warn('test', UserWarning)
|
||||
self.assertTrue(len(w))
|
||||
finally:
|
||||
globals_dict['__file__'] = oldfile
|
||||
|
||||
|
|
|
|||
|
|
@ -409,10 +409,10 @@ warn_explicit(PyObject *category, PyObject *message,
|
|||
else {
|
||||
PyObject *res;
|
||||
|
||||
if (!PyMethod_Check(show_fxn) && !PyFunction_Check(show_fxn)) {
|
||||
if (!PyCallable_Check(show_fxn)) {
|
||||
PyErr_SetString(PyExc_TypeError,
|
||||
"warnings.showwarning() must be set to a "
|
||||
"function or method");
|
||||
"callable");
|
||||
Py_DECREF(show_fxn);
|
||||
goto cleanup;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue