diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2017-11-15 16:04:46 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-11-15 16:04:46 (GMT) |
commit | 3864248866d6224336c7be49670447cb4d125cd6 (patch) | |
tree | 3b17aa9488ad298fa8b16c2b4271bef323479920 /Lib | |
parent | eb38367f20b05f2ad04a4833bceb369b5e78b1a3 (diff) | |
download | cpython-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.py | 33 |
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): |