r51317 - in python/trunk: Lib/ctypes/__init__.py Lib/ctypes/test/test_python_api.py Misc/NEWS Modules/_ctypes/cfield.c
Author: thomas.heller Date: Wed Aug 16 16:07:44 2006 New Revision: 51317 Modified: python/trunk/Lib/ctypes/__init__.py python/trunk/Lib/ctypes/test/test_python_api.py python/trunk/Misc/NEWS python/trunk/Modules/_ctypes/cfield.c Log: 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. Modified: python/trunk/Lib/ctypes/__init__.py ============================================================================== --- python/trunk/Lib/ctypes/__init__.py (original) +++ python/trunk/Lib/ctypes/__init__.py Wed Aug 16 16:07:44 2006 @@ -135,6 +135,11 @@ 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" Modified: python/trunk/Lib/ctypes/test/test_python_api.py ============================================================================== --- python/trunk/Lib/ctypes/test/test_python_api.py (original) +++ python/trunk/Lib/ctypes/test/test_python_api.py Wed Aug 16 16:07:44 2006 @@ -78,5 +78,10 @@ # 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() Modified: python/trunk/Misc/NEWS ============================================================================== --- python/trunk/Misc/NEWS (original) +++ python/trunk/Misc/NEWS Wed Aug 16 16:07:44 2006 @@ -64,6 +64,9 @@ 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 Modified: python/trunk/Modules/_ctypes/cfield.c ============================================================================== --- python/trunk/Modules/_ctypes/cfield.c (original) +++ python/trunk/Modules/_ctypes/cfield.c Wed Aug 16 16:07:44 2006 @@ -1100,7 +1100,7 @@ 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);
participants (1)
-
thomas.heller