diff options
-rw-r--r-- | Lib/test/test_exceptions.py | 17 | ||||
-rw-r--r-- | Objects/exceptions.c | 38 | ||||
-rw-r--r-- | Python/import.c | 10 |
3 files changed, 7 insertions, 58 deletions
diff --git a/Lib/test/test_exceptions.py b/Lib/test/test_exceptions.py index 2f57f3d..657cbc5 100644 --- a/Lib/test/test_exceptions.py +++ b/Lib/test/test_exceptions.py @@ -9,16 +9,6 @@ from test.test_support import (TESTFN, unlink, run_unittest, catch_warning) from test.test_pep352 import ignore_message_warning -class NaiveException(Exception): - def __init__(self, x): - self.x = x - -class SomewhatNaiveException(Exception): - def __init__(self, x): - self.x = x - Exception.__init__(self) - - # XXX This is not really enough, each *operation* should be tested! class ExceptionTests(unittest.TestCase): @@ -273,10 +263,6 @@ class ExceptionTests(unittest.TestCase): {'message' : '', 'args' : (u'\u3042', 0, 1, 'ouch'), 'object' : u'\u3042', 'reason' : 'ouch', 'start' : 0, 'end' : 1}), - (NaiveException, ('foo',), - {'message': '', 'args': ('foo',), 'x': 'foo'}), - (SomewhatNaiveException, ('foo',), - {'message': '', 'args': (), 'x': 'foo'}), ] try: exceptionList.append( @@ -297,8 +283,7 @@ class ExceptionTests(unittest.TestCase): if type(e) is not exc: raise # Verify module name - if not type(e).__name__.endswith('NaiveException'): - self.assertEquals(type(e).__module__, 'exceptions') + self.assertEquals(type(e).__module__, 'exceptions') # Verify no ref leaks in Exc_str() s = str(e) for checkArgName in expected: diff --git a/Objects/exceptions.c b/Objects/exceptions.c index 103a662..3d79383 100644 --- a/Objects/exceptions.c +++ b/Objects/exceptions.c @@ -38,31 +38,18 @@ BaseException_new(PyTypeObject *type, PyObject *args, PyObject *kwds) /* the dict is created on the fly in PyObject_GenericSetAttr */ self->message = self->dict = NULL; - if (!args) { - /* MemoryError instantiation */ - args = PyTuple_New(0); - if (!args) { - Py_DECREF(self); - return NULL; - } - } else { - Py_INCREF(args); - } - - self->args = args; - - /* Since the args can be overwritten in __init__, we have to store - the original args somewhere for pickling. */ - if (PyObject_SetAttrString((PyObject *)self, "__newargs__", args) < 0) { + self->args = PyTuple_New(0); + if (!self->args) { Py_DECREF(self); return NULL; } - + self->message = PyString_FromString(""); if (!self->message) { Py_DECREF(self); return NULL; } + return (PyObject *)self; } @@ -160,23 +147,10 @@ BaseException_repr(PyBaseExceptionObject *self) static PyObject * BaseException_reduce(PyBaseExceptionObject *self) { - PyObject *result; - PyObject *newargs = PyObject_GetAttrString((PyObject *)self, "__newargs__"); - if (!newargs) { - if (PyErr_ExceptionMatches(PyExc_AttributeError)) { - PyErr_SetString(PyExc_AttributeError, - "To pickle exceptions via BaseException.__reduce__, " - "you need to set the __newargs__ attribute in your " - "custom __new__ method."); - } - return NULL; - } if (self->args && self->dict) - result = PyTuple_Pack(3, Py_Type(self), newargs, self->dict); + return PyTuple_Pack(3, Py_Type(self), self->args, self->dict); else - result = PyTuple_Pack(2, Py_Type(self), newargs); - Py_DECREF(newargs); - return result; + return PyTuple_Pack(2, Py_Type(self), self->args); } /* diff --git a/Python/import.c b/Python/import.c index dc97940..678a30b 100644 --- a/Python/import.c +++ b/Python/import.c @@ -1395,7 +1395,6 @@ find_module(char *fullname, char *subname, PyObject *path, char *buf, filemode = fdp->mode; if (filemode[0] == 'U') filemode = "r" PY_STDIOTEXTMODE; - errno = 0; fp = fopen(buf, filemode); if (fp != NULL) { if (case_ok(buf, len, namelen, name)) @@ -1405,15 +1404,6 @@ find_module(char *fullname, char *subname, PyObject *path, char *buf, fp = NULL; } } - /* issue a warning if the file is there */ - /*if (errno != ENOENT) { - char warnstr[MAXPATHLEN+80]; - sprintf(warnstr, "Not importing '%.*s': "); - - if (PyErr_Warn(PyExc_ImportWarning, - warnstr)) { - - }*/ #if defined(PYOS_OS2) /* restore the saved snapshot */ strcpy(buf, saved_buf); |