summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/ctypes/__init__.py5
-rw-r--r--Lib/ctypes/test/test_python_api.py5
-rw-r--r--Misc/NEWS3
-rw-r--r--Modules/_ctypes/cfield.c2
4 files changed, 14 insertions, 1 deletions
diff --git a/Lib/ctypes/__init__.py b/Lib/ctypes/__init__.py
index 7690796..61923b6 100644
--- a/Lib/ctypes/__init__.py
+++ b/Lib/ctypes/__init__.py
@@ -135,6 +135,11 @@ from _ctypes import _SimpleCData
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"
diff --git a/Lib/ctypes/test/test_python_api.py b/Lib/ctypes/test/test_python_api.py
index 78e0231..9d13474 100644
--- a/Lib/ctypes/test/test_python_api.py
+++ b/Lib/ctypes/test/test_python_api.py
@@ -78,5 +78,10 @@ class PythonAPITestCase(unittest.TestCase):
# 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__":
unittest.main()
diff --git a/Misc/NEWS b/Misc/NEWS
index 587ed1e..712a997 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -64,6 +64,9 @@ Core and builtins
Library
-------
+- 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, uuid.py had some
workarounds for clocks with low resolution, to stop the code yielding
diff --git a/Modules/_ctypes/cfield.c b/Modules/_ctypes/cfield.c
index 62a5fe6..c16a387 100644
--- a/Modules/_ctypes/cfield.c
+++ b/Modules/_ctypes/cfield.c
@@ -1100,7 +1100,7 @@ O_get(void *ptr, unsigned size)
if (!PyErr_Occurred())
/* Set an error if not yet set */
PyErr_SetString(PyExc_ValueError,
- "PyObject is NULL?");
+ "PyObject is NULL");
return NULL;
}
Py_INCREF(ob);