summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/warnings.py14
1 files changed, 10 insertions, 4 deletions
diff --git a/Lib/warnings.py b/Lib/warnings.py
index 47eb19a..a894bf2 100644
--- a/Lib/warnings.py
+++ b/Lib/warnings.py
@@ -167,14 +167,20 @@ def _getcategory(category):
if re.match("^[a-zA-Z0-9_]+$", category):
try:
cat = eval(category)
- except KeyError:
- raise _OptionError("invalid warning category: %s" % `category`)
+ except NameError:
+ raise _OptionError("unknown warning category: %s" % `category`)
else:
i = category.rfind(".")
module = category[:i]
klass = category[i+1:]
- m = __import__(module, None, None, [klass])
- cat = getattr(m, klass)
+ try:
+ m = __import__(module, None, None, [klass])
+ except ImportError:
+ raise _OptionError("invalid module name: %s" % `module`)
+ try:
+ cat = getattr(m, klass)
+ except AttributeError:
+ raise _OptionError("unknown warning category: %s" % `category`)
if (not isinstance(cat, types.ClassType) or
not issubclass(cat, Warning)):
raise _OptionError("invalid warning category: %s" % `category`)