Index: Lib/logging/__init__.py =================================================================== --- Lib/logging/__init__.py (revision 73867) +++ Lib/logging/__init__.py (working copy) @@ -631,6 +631,8 @@ """ Set the logging level of this handler. """ + if not isinstance(level, int): + raise TypeError("level must be an integer") self.level = level def format(self, record): @@ -1020,6 +1022,8 @@ """ Set the logging level of this logger. """ + if not isinstance(level, int): + raise TypeError("level must be an integer") self.level = level def debug(self, msg, *args, **kwargs): @@ -1397,10 +1401,6 @@ root.addHandler(hdlr) level = kwargs.get("level") if level is not None: - if str(level) == level: # If a string was passed, do more checks - if level not in _levelNames: - raise ValueError("Unknown level: %r" % level) - level = _levelNames[level] root.setLevel(level) #--------------------------------------------------------------------------- Index: Lib/test/test_logging.py =================================================================== --- Lib/test/test_logging.py (revision 73867) +++ Lib/test/test_logging.py (working copy) @@ -263,7 +263,16 @@ ('INF.BADPARENT', 'INFO', '4'), ]) + def test_invalid_log_level(self): + # Make sure specifying anything other than an int raises a TypeError. + INF = logging.getLogger("INF") + self.assertRaises(TypeError, INF.setLevel, "DEBUG") + self.assertRaises(TypeError, INF.setLevel, object()) + self.assertRaises(TypeError, INF.log, object(), 'foo') + self.assertRaises(TypeError, self.root_hdlr.setLevel, "DEBUG") + self.assertRaises(TypeError, self.root_hdlr.setLevel, object()) + class BasicFilterTest(BaseTest): """Test the bundled Filter class."""