Thomas Heller  committed d23b667

The __repr__ method of a NULL py_object does no longer raise an
exception. Remove a stray '?' character from the exception text
when the value is retrieved of such an object.

Includes tests.

  • Participants
  • Parent commits a5d0f9f
  • Branches legacy-trunk

Comments (0)

Files changed (4)

File Lib/ctypes/

 class py_object(_SimpleCData):
     _type_ = "O"
+    def __repr__(self):
+        try:
+            return super(py_object, self).__repr__()
+        except ValueError:
+            return "%s(<NULL>)" % type(self).__name__
 class c_short(_SimpleCData):
     _type_ = "h"

File Lib/ctypes/test/

         # not enough arguments
         self.failUnlessRaises(TypeError, PyOS_snprintf, buf)
+    def test_pyobject_repr(self):
+        self.failUnlessEqual(repr(py_object()), "py_object(<NULL>)")
+        self.failUnlessEqual(repr(py_object(42)), "py_object(42)")
+        self.failUnlessEqual(repr(py_object(object)), "py_object(%r)" % object)
 if __name__ == "__main__":
+- The __repr__ method a NULL ctypes.py_object() does no longer raise
+  an exception.
 - uuid.UUID now has a bytes_le attribute. This returns the UUID in 
   little-endian byte order for Windows. In addition, had some
   workarounds for clocks with low resolution, to stop the code yielding

File Modules/_ctypes/cfield.c

 		if (!PyErr_Occurred())
 			/* Set an error if not yet set */
-					"PyObject is NULL?");
+					"PyObject is NULL");
 		return NULL;