bpo-36272: Logging now propagates RecursionError (GH-12312)

This commit is contained in:
Rémi Lapeyre 2019-03-15 07:53:34 +01:00 committed by Vinay Sajip
parent 1c668d1657
commit 65f64b1903
3 changed files with 22 additions and 1 deletions

View File

@ -1032,6 +1032,8 @@ class Handler(Filterer):
sys.stderr.write('Message: %r\n'
'Arguments: %s\n' % (record.msg,
record.args))
except RecursionError: # See issue 36272
raise
except Exception:
sys.stderr.write('Unable to print the message and arguments'
' - possible formatting error.\nUse the'
@ -1094,6 +1096,8 @@ class StreamHandler(Handler):
# issue 35046: merged two stream.writes into one.
stream.write(msg + self.terminator)
self.flush()
except RecursionError: # See issue 36272
raise
except Exception:
self.handleError(record)

View File

@ -41,7 +41,7 @@ import socket
import struct
import sys
import tempfile
from test.support.script_helper import assert_python_ok
from test.support.script_helper import assert_python_ok, assert_python_failure
from test import support
import textwrap
import threading
@ -4142,6 +4142,21 @@ class ModuleLevelMiscTest(BaseTest):
self.assertIn("exception in __del__", err)
self.assertIn("ValueError: some error", err)
def test_recursion_error(self):
# Issue 36272
code = """if 1:
import logging
def rec():
logging.error("foo")
rec()
rec()"""
rc, out, err = assert_python_failure("-c", code)
err = err.decode()
self.assertNotIn("Cannot recover from stack overflow.", err)
self.assertEqual(rc, 1)
class LogRecordTest(BaseTest):
def test_str_rep(self):

View File

@ -0,0 +1,2 @@
:mod:`logging` does not silently ignore RecursionError anymore. Patch
contributed by Rémi Lapeyre.