mirror of
https://github.com/python/cpython.git
synced 2025-08-31 14:07:50 +00:00
bpo-31949: Fixed several issues in printing tracebacks (PyTraceBack_Print()). (#4289)
* Setting sys.tracebacklimit to 0 or less now suppresses printing tracebacks. * Setting sys.tracebacklimit to None now causes using the default limit. * Setting sys.tracebacklimit to an integer larger than LONG_MAX now means using the limit LONG_MAX rather than the default limit. * Fixed integer overflows in the case of more than 2**31 traceback items on Windows. * Fixed output errors handling.
This commit is contained in:
parent
6545256df9
commit
edad8eebee
3 changed files with 94 additions and 52 deletions
|
@ -808,6 +808,39 @@ class SysModuleTest(unittest.TestCase):
|
|||
self.assertIsInstance(level, int)
|
||||
self.assertGreater(level, 0)
|
||||
|
||||
def test_sys_tracebacklimit(self):
|
||||
code = """if 1:
|
||||
import sys
|
||||
def f1():
|
||||
1 / 0
|
||||
def f2():
|
||||
f1()
|
||||
sys.tracebacklimit = %r
|
||||
f2()
|
||||
"""
|
||||
def check(tracebacklimit, expected):
|
||||
p = subprocess.Popen([sys.executable, '-c', code % tracebacklimit],
|
||||
stderr=subprocess.PIPE)
|
||||
out = p.communicate()[1]
|
||||
self.assertEqual(out.splitlines(), expected)
|
||||
|
||||
traceback = [
|
||||
b'Traceback (most recent call last):',
|
||||
b' File "<string>", line 8, in <module>',
|
||||
b' File "<string>", line 6, in f2',
|
||||
b' File "<string>", line 4, in f1',
|
||||
b'ZeroDivisionError: division by zero'
|
||||
]
|
||||
check(10, traceback)
|
||||
check(3, traceback)
|
||||
check(2, traceback[:1] + traceback[2:])
|
||||
check(1, traceback[:1] + traceback[3:])
|
||||
check(0, [traceback[-1]])
|
||||
check(-1, [traceback[-1]])
|
||||
check(1<<1000, traceback)
|
||||
check(-1<<1000, [traceback[-1]])
|
||||
check(None, traceback)
|
||||
|
||||
|
||||
@test.support.cpython_only
|
||||
class SizeofTest(unittest.TestCase):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue