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.
This commit is contained in:
Thomas Heller 2006-08-16 14:07:44 +00:00
parent 596fc9c384
commit b0aa98fd4f
4 changed files with 14 additions and 1 deletions

View File

@ -135,6 +135,11 @@ from _ctypes import _SimpleCData
class py_object(_SimpleCData): class py_object(_SimpleCData):
_type_ = "O" _type_ = "O"
def __repr__(self):
try:
return super(py_object, self).__repr__()
except ValueError:
return "%s(<NULL>)" % type(self).__name__
class c_short(_SimpleCData): class c_short(_SimpleCData):
_type_ = "h" _type_ = "h"

View File

@ -78,5 +78,10 @@ class PythonAPITestCase(unittest.TestCase):
# not enough arguments # not enough arguments
self.failUnlessRaises(TypeError, PyOS_snprintf, buf) 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__": if __name__ == "__main__":
unittest.main() unittest.main()

View File

@ -64,6 +64,9 @@ Core and builtins
Library 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 - 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 little-endian byte order for Windows. In addition, uuid.py had some
workarounds for clocks with low resolution, to stop the code yielding workarounds for clocks with low resolution, to stop the code yielding

View File

@ -1100,7 +1100,7 @@ O_get(void *ptr, unsigned size)
if (!PyErr_Occurred()) if (!PyErr_Occurred())
/* Set an error if not yet set */ /* Set an error if not yet set */
PyErr_SetString(PyExc_ValueError, PyErr_SetString(PyExc_ValueError,
"PyObject is NULL?"); "PyObject is NULL");
return NULL; return NULL;
} }
Py_INCREF(ob); Py_INCREF(ob);