Improve error messages for invalid warning arguments; don't raise
exceptions but always print a warning message.
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 @@
     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`)