From: Thomas Heller Date: Wed, 16 Aug 2006 14:07:44 +0000 (+0000) Subject: The __repr__ method of a NULL py_object does no longer raise an X-Git-Tag: v2.5c1~10 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b0aa98fd4f02c4d5a9d9f43ac013595cbcf1f06c;p=python 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. --- diff --git a/Lib/ctypes/__init__.py b/Lib/ctypes/__init__.py index 7690796e4a..61923b61e5 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()" % 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 78e02317cf..9d134740f5 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()") + 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 587ed1e128..712a997816 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 62a5fe6eb3..c16a387464 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);