From f2c0830585a4c58c2e0cb6acbfc4efa628563c12 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sat, 5 Jun 2004 06:16:22 +0000 Subject: [PATCH] SF bug #963956: Bad error mesage when subclassing a module Add a more informative message for the common user mistake of subclassing from a module name rather than another class (i.e. random instead of random.random). --- Python/ceval.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Python/ceval.c b/Python/ceval.c index 2cebf44a4c9..2d600141f62 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -3922,6 +3922,15 @@ build_class(PyObject *methods, PyObject *bases, PyObject *name) } result = PyObject_CallFunction(metaclass, "OOO", name, bases, methods); Py_DECREF(metaclass); + if (result == NULL && PyErr_ExceptionMatches(PyExc_TypeError)) { + /* A type error here likely means that the user passed + in a base that was not a class (such the random module + instead of the random.random type). Help them out with + a more informative error message */ + PyErr_SetString(PyExc_TypeError, + "Error when calling the metaclass.\n" \ + "Make sure the base arguments are valid."); + } return result; }