mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
Issue #22423: Unhandled exception in thread no longer causes unhandled
AttributeError when sys.stderr is None.
This commit is contained in:
parent
3f40c40dea
commit
52005c2e13
3 changed files with 94 additions and 10 deletions
|
@ -4,7 +4,7 @@ Tests for the threading module.
|
|||
|
||||
import test.support
|
||||
from test.support import verbose, strip_python_stderr, import_module, cpython_only
|
||||
from test.script_helper import assert_python_ok
|
||||
from test.script_helper import assert_python_ok, assert_python_failure
|
||||
|
||||
import random
|
||||
import re
|
||||
|
@ -15,7 +15,6 @@ import time
|
|||
import unittest
|
||||
import weakref
|
||||
import os
|
||||
from test.script_helper import assert_python_ok, assert_python_failure
|
||||
import subprocess
|
||||
|
||||
from test import lock_tests
|
||||
|
@ -962,6 +961,88 @@ class ThreadingExceptionTests(BaseTestCase):
|
|||
self.assertEqual(p.returncode, 0, "Unexpected error: " + stderr.decode())
|
||||
self.assertEqual(data, expected_output)
|
||||
|
||||
def test_print_exception(self):
|
||||
script = r"""if True:
|
||||
import threading
|
||||
import time
|
||||
|
||||
running = False
|
||||
def run():
|
||||
global running
|
||||
running = True
|
||||
while running:
|
||||
time.sleep(0.01)
|
||||
1/0
|
||||
t = threading.Thread(target=run)
|
||||
t.start()
|
||||
while not running:
|
||||
time.sleep(0.01)
|
||||
running = False
|
||||
t.join()
|
||||
"""
|
||||
rc, out, err = assert_python_ok("-c", script)
|
||||
self.assertEqual(out, b'')
|
||||
err = err.decode()
|
||||
self.assertIn("Exception in thread", err)
|
||||
self.assertIn("Traceback (most recent call last):", err)
|
||||
self.assertIn("ZeroDivisionError", err)
|
||||
self.assertNotIn("Unhandled exception", err)
|
||||
|
||||
def test_print_exception_stderr_is_none_1(self):
|
||||
script = r"""if True:
|
||||
import sys
|
||||
import threading
|
||||
import time
|
||||
|
||||
running = False
|
||||
def run():
|
||||
global running
|
||||
running = True
|
||||
while running:
|
||||
time.sleep(0.01)
|
||||
1/0
|
||||
t = threading.Thread(target=run)
|
||||
t.start()
|
||||
while not running:
|
||||
time.sleep(0.01)
|
||||
sys.stderr = None
|
||||
running = False
|
||||
t.join()
|
||||
"""
|
||||
rc, out, err = assert_python_ok("-c", script)
|
||||
self.assertEqual(out, b'')
|
||||
err = err.decode()
|
||||
self.assertIn("Exception in thread", err)
|
||||
self.assertIn("Traceback (most recent call last):", err)
|
||||
self.assertIn("ZeroDivisionError", err)
|
||||
self.assertNotIn("Unhandled exception", err)
|
||||
|
||||
def test_print_exception_stderr_is_none_2(self):
|
||||
script = r"""if True:
|
||||
import sys
|
||||
import threading
|
||||
import time
|
||||
|
||||
running = False
|
||||
def run():
|
||||
global running
|
||||
running = True
|
||||
while running:
|
||||
time.sleep(0.01)
|
||||
1/0
|
||||
sys.stderr = None
|
||||
t = threading.Thread(target=run)
|
||||
t.start()
|
||||
while not running:
|
||||
time.sleep(0.01)
|
||||
running = False
|
||||
t.join()
|
||||
"""
|
||||
rc, out, err = assert_python_ok("-c", script)
|
||||
self.assertEqual(out, b'')
|
||||
self.assertNotIn("Unhandled exception", err.decode())
|
||||
|
||||
|
||||
class TimerTests(BaseTestCase):
|
||||
|
||||
def setUp(self):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue