mirror of
https://github.com/python/cpython.git
synced 2025-10-21 22:22:48 +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):
|
def test_showwarning_not_callable(self):
|
||||||
with original_warnings.catch_warnings(module=self.module):
|
with original_warnings.catch_warnings(module=self.module):
|
||||||
self.module.filterwarnings("always", category=UserWarning)
|
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
|
self.module.showwarning = 23
|
||||||
try:
|
self.assertRaises(TypeError, self.module.warn, "Warning!")
|
||||||
self.assertRaises(TypeError, self.module.warn, "Warning!")
|
|
||||||
finally:
|
|
||||||
self.module.showwarning = old_showwarning
|
|
||||||
|
|
||||||
def test_show_warning_output(self):
|
def test_show_warning_output(self):
|
||||||
# With showarning() missing, make sure that output is okay.
|
# With showarning() missing, make sure that output is okay.
|
||||||
|
@ -547,10 +546,13 @@ class _WarningsTests(BaseTest):
|
||||||
globals_dict = globals()
|
globals_dict = globals()
|
||||||
oldfile = globals_dict['__file__']
|
oldfile = globals_dict['__file__']
|
||||||
try:
|
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)
|
self.module.filterwarnings("always", category=UserWarning)
|
||||||
globals_dict['__file__'] = None
|
globals_dict['__file__'] = None
|
||||||
original_warnings.warn('test', UserWarning)
|
original_warnings.warn('test', UserWarning)
|
||||||
|
self.assertTrue(len(w))
|
||||||
finally:
|
finally:
|
||||||
globals_dict['__file__'] = oldfile
|
globals_dict['__file__'] = oldfile
|
||||||
|
|
||||||
|
|
|
@ -409,10 +409,10 @@ warn_explicit(PyObject *category, PyObject *message,
|
||||||
else {
|
else {
|
||||||
PyObject *res;
|
PyObject *res;
|
||||||
|
|
||||||
if (!PyMethod_Check(show_fxn) && !PyFunction_Check(show_fxn)) {
|
if (!PyCallable_Check(show_fxn)) {
|
||||||
PyErr_SetString(PyExc_TypeError,
|
PyErr_SetString(PyExc_TypeError,
|
||||||
"warnings.showwarning() must be set to a "
|
"warnings.showwarning() must be set to a "
|
||||||
"function or method");
|
"callable");
|
||||||
Py_DECREF(show_fxn);
|
Py_DECREF(show_fxn);
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue