str.join: Append `str`ed element to error message
The Starlark error message for `str.join` used to be:
expected string for sequence element %d, got '%s'
; with the index of the erroneous element and its `type`
Now it is:
expected string for sequence element %d, got '%s' of type %s
; which adds and emphasizes the `str` value of the element
to the prior error message for aid in disambiguation
PiperOrigin-RevId: 417439474
diff --git a/src/main/java/net/starlark/java/eval/StringModule.java b/src/main/java/net/starlark/java/eval/StringModule.java
index 92bf177..0810825 100644
--- a/src/main/java/net/starlark/java/eval/StringModule.java
+++ b/src/main/java/net/starlark/java/eval/StringModule.java
@@ -151,7 +151,8 @@
for (Object item : items) {
if (!(item instanceof String)) {
throw Starlark.errorf(
- "expected string for sequence element %d, got '%s'", i, Starlark.type(item));
+ "expected string for sequence element %d, got '%s' of type %s",
+ i, Starlark.str(item), Starlark.type(item));
}
i++;
}
diff --git a/src/test/java/net/starlark/java/eval/MethodLibraryTest.java b/src/test/java/net/starlark/java/eval/MethodLibraryTest.java
index 3a49b0d..7eef987 100644
--- a/src/test/java/net/starlark/java/eval/MethodLibraryTest.java
+++ b/src/test/java/net/starlark/java/eval/MethodLibraryTest.java
@@ -759,6 +759,6 @@
public void testStringJoinRequiresStrings() throws Exception {
ev.new Scenario()
.testIfErrorContains(
- "expected string for sequence element 1, got 'int'", "', '.join(['foo', 2])");
+ "expected string for sequence element 1, got '2' of type int", "', '.join(['foo', 2])");
}
}