Philip Jenvey avatar Philip Jenvey committed c914d9d

print() should always call str()

Comments (0)

Files changed (2)

pypy/module/__builtin__/app_io.py

     if fp is None:
         return
     def write(data):
-        if not isinstance(data, str):
-            data = str(data)
-        fp.write(data)
+        fp.write(str(data))
     sep = kwargs.pop("sep", None)
     if sep is not None:
         if not isinstance(sep, str):

pypy/module/__builtin__/test/test_builtin.py

         pr(None, file=out)
         assert out.getvalue() == "None\n"
 
+    def test_print_function2(self):
+        import builtins
+        import io
+        class MyStr(str):
+            def __str__(self):
+                return "sqlalchemy"
+        out = io.StringIO()
+        s = MyStr('A')
+        pr = getattr(builtins, 'print')
+        pr(s, file=out)
+        pr(str(s), file=out)
+        assert out.getvalue() == "sqlalchemy\nsqlalchemy\n"
+
     def test_print_exceptions(self):
         import builtins
         pr = getattr(builtins, "print")
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.