Commit 8bf7c484 authored by Guido van Rossum's avatar Guido van Rossum

allow classes as exceptions

parent 8ae87c04
......@@ -783,13 +783,33 @@ eval_code(co, globals, locals, owner, arg)
u = w;
w = gettupleitem(u, 0);
INCREF(w);
INCREF(w);
DECREF(u);
}
if (!is_stringobject(w))
err_setstr(TypeError,
"exceptions must be strings");
else
if (is_stringobject(w)) {
err_setval(w, v);
} else if (is_classobject(w)) {
if (!is_instanceobject(v)
|| !issubclass((object*)((instanceobject*)v)->in_class,
w))
err_setstr(TypeError,
"a class exception must have a value that is an instance of the class");
else
err_setval(w,v);
} else if (is_instanceobject(w)) {
if (v != None)
err_setstr(TypeError,
"an instance exception may not have a separate value");
else {
DECREF(v);
v = w;
w = (object*) ((instanceobject*)w)->in_class;
INCREF(w);
err_setval(w, v);
}
} else
err_setstr(TypeError,
"exceptions must be strings, classes, or instances");
DECREF(v);
DECREF(w);
why = WHY_EXCEPTION;
......@@ -2393,6 +2413,8 @@ cmp_exception(err, v)
}
return 0;
}
if (is_classobject(v) && is_classobject(err))
return issubclass(err, v);
return err == v;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment