summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2017-11-15 16:04:46 (GMT)
committerGitHub <noreply@github.com>2017-11-15 16:04:46 (GMT)
commit3864248866d6224336c7be49670447cb4d125cd6 (patch)
tree3b17aa9488ad298fa8b16c2b4271bef323479920 /Lib
parenteb38367f20b05f2ad04a4833bceb369b5e78b1a3 (diff)
downloadcpython-3864248866d6224336c7be49670447cb4d125cd6.zip
cpython-3864248866d6224336c7be49670447cb4d125cd6.tar.gz
cpython-3864248866d6224336c7be49670447cb4d125cd6.tar.bz2
[3.6] bpo-31949: Fixed several issues in printing tracebacks (PyTraceBack_Print()). (GH-4289) (#4406)
* 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.. (cherry picked from commit edad8eebeee3c99e324a7f1ac5073167c2b0b54d)
Diffstat (limited to 'Lib')
-rw-r--r--Lib/test/test_sys.py33
1 files changed, 33 insertions, 0 deletions
diff --git a/Lib/test/test_sys.py b/Lib/test/test_sys.py
index d49e4ab..a47a6bb 100644
--- a/Lib/test/test_sys.py
+++ b/Lib/test/test_sys.py
@@ -826,6 +826,39 @@ class SysModuleTest(unittest.TestCase):
rc, stdout, stderr = assert_python_ok('-c', code)
self.assertEqual(stdout.rstrip(), b'True')
+ 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):