Skip to content

Commit 8dc58af

Browse files
committed
Raise correct error in the default displayhook when stdout is lost
1 parent 2a7bbc9 commit 8dc58af

File tree

2 files changed

+13
-8
lines changed
  • graalpython

2 files changed

+13
-8
lines changed

graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_sys.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,4 +35,5 @@
3535
*graalpython.lib-python.3.test.test_sys.UnraisableHookTest.test_original_unraisablehook_err
3636
*graalpython.lib-python.3.test.test_sys.UnraisableHookTest.test_original_unraisablehook_wrong_type
3737
*graalpython.lib-python.3.test.test_sys.SysModuleTest.test_sys_flags
38-
*graalpython.lib-python.3.test.test_sys.DisplayHookTest.test_lost_displayhook
38+
*graalpython.lib-python.3.test.test_sys.DisplayHookTest.test_lost_displayhook
39+
*graalpython.lib-python.3.test.test_sys.DisplayHookTest.test_original_displayhook

graalpython/lib-graalpython/sys.py

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -276,15 +276,19 @@ def displayhook(value):
276276
builtins._ = None
277277
text = repr(value)
278278
try:
279-
stdout.write(text)
279+
local_stdout = stdout
280+
except NameError as e:
281+
raise RuntimeError("lost sys.stdout") from e
282+
try:
283+
local_stdout.write(text)
280284
except UnicodeEncodeError:
281-
bytes = text.encode(stdout.encoding, 'backslashreplace')
282-
if hasattr(stdout, 'buffer'):
283-
stdout.buffer.write(bytes)
285+
bytes = text.encode(local_stdout.encoding, 'backslashreplace')
286+
if hasattr(local_stdout, 'buffer'):
287+
local_stdout.buffer.write(bytes)
284288
else:
285-
text = bytes.decode(stdout.encoding, 'strict')
286-
stdout.write(text)
287-
stdout.write("\n")
289+
text = bytes.decode(local_stdout.encoding, 'strict')
290+
local_stdout.write(text)
291+
local_stdout.write("\n")
288292
builtins._ = value
289293

290294

0 commit comments

Comments
 (0)