Skip to content

Commit 76cd9d0

Browse files
committed
Fix swallowing exceptions from __repr__ in repl
1 parent a46366b commit 76cd9d0

File tree

2 files changed

+7
-18
lines changed

2 files changed

+7
-18
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/SysModuleBuiltins.java

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1689,23 +1689,13 @@ static Object doHook(VirtualFrame frame, PythonModule sys, Object obj,
16891689
throw raiseNode.get(inliningTarget).raise(RuntimeError, LOST_S, "sys.stdout");
16901690
}
16911691

1692-
boolean reprWriteOk = false;
1693-
boolean unicodeEncodeError = false;
1692+
Object reprVal = null;
16941693
try {
1695-
Object reprVal = objectRepr(frame, inliningTarget, obj, reprAsObjectNode);
1696-
if (reprVal == null) {
1697-
reprWriteOk = false;
1698-
} else {
1699-
reprWriteOk = true;
1700-
fileWriteString(frame, inliningTarget, stdOut, castToStringNode.execute(inliningTarget, reprVal), getAttr, callNode);
1701-
}
1694+
reprVal = objectRepr(frame, inliningTarget, obj, reprAsObjectNode);
17021695
} catch (PException pe) {
17031696
pe.expect(inliningTarget, UnicodeEncodeError, unicodeEncodeErrorProfile);
17041697
// repr(o) is not encodable to sys.stdout.encoding with sys.stdout.errors error
17051698
// handler (which is probably 'strict')
1706-
unicodeEncodeError = true;
1707-
}
1708-
if (!reprWriteOk && unicodeEncodeError) {
17091699
// inlined sysDisplayHookUnencodable
17101700
final TruffleString stdoutEncoding = objectLookupAttrAsString(frame, inliningTarget, stdOut, T_ENCODING, lookupAttr, castToStringNode);
17111701
final Object reprStr = objectRepr(frame, inliningTarget, obj, reprAsObjectNode);
@@ -1720,6 +1710,9 @@ static Object doHook(VirtualFrame frame, PythonModule sys, Object obj,
17201710
fileWriteString(frame, inliningTarget, stdOut, castToStringNode.execute(inliningTarget, str), getAttr, callNode);
17211711
}
17221712
}
1713+
if (reprVal != null) {
1714+
fileWriteString(frame, inliningTarget, stdOut, castToStringNode.execute(inliningTarget, reprVal), getAttr, callNode);
1715+
}
17231716

17241717
fileWriteString(frame, inliningTarget, stdOut, T_NEWLINE, getAttr, callNode);
17251718
setAttr.execute(frame, inliningTarget, builtins, T___, obj);

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/lib/PyTraceBackPrintNode.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2021, 2023, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2021, 2024, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* The Universal Permissive License (UPL), Version 1.0
@@ -151,11 +151,7 @@ public static Object objectRepr(VirtualFrame frame, Object value) {
151151
}
152152

153153
public static Object objectRepr(VirtualFrame frame, Node inliningTarget, Object value, PyObjectReprAsObjectNode reprAsObjectNode) {
154-
try {
155-
return reprAsObjectNode.execute(frame, inliningTarget, value);
156-
} catch (PException pe) {
157-
return null;
158-
}
154+
return reprAsObjectNode.execute(frame, inliningTarget, value);
159155
}
160156

161157
public static TruffleString castToString(Object value) {

0 commit comments

Comments
 (0)