diff --git a/Doc/library/symtable.rst b/Doc/library/symtable.rst index e364232247c..0264f891cc8 100644 --- a/Doc/library/symtable.rst +++ b/Doc/library/symtable.rst @@ -194,5 +194,5 @@ Examining Symbol Tables .. method:: get_namespace() - Return the namespace bound to this name. If more than one namespace is - bound, :exc:`ValueError` is raised. + Return the namespace bound to this name. If more than one or no namespace + is bound to this name, a :exc:`ValueError` is raised. diff --git a/Lib/symtable.py b/Lib/symtable.py index 922854bf669..75ff0921f4c 100644 --- a/Lib/symtable.py +++ b/Lib/symtable.py @@ -306,11 +306,15 @@ class Symbol: def get_namespace(self): """Return the single namespace bound to this name. - Raises ValueError if the name is bound to multiple namespaces. + Raises ValueError if the name is bound to multiple namespaces + or no namespace. """ - if len(self.__namespaces) != 1: + if len(self.__namespaces) == 0: + raise ValueError("name is not bound to any namespaces") + elif len(self.__namespaces) > 1: raise ValueError("name is bound to multiple namespaces") - return self.__namespaces[0] + else: + return self.__namespaces[0] if __name__ == "__main__": import os, sys diff --git a/Lib/test/test_symtable.py b/Lib/test/test_symtable.py index a30e5349603..819354e4eee 100644 --- a/Lib/test/test_symtable.py +++ b/Lib/test/test_symtable.py @@ -159,6 +159,10 @@ class SymtableTest(unittest.TestCase): self.assertEqual(len(ns_test.get_namespaces()), 2) self.assertRaises(ValueError, ns_test.get_namespace) + ns_test_2 = self.top.lookup("glob") + self.assertEqual(len(ns_test_2.get_namespaces()), 0) + self.assertRaises(ValueError, ns_test_2.get_namespace) + def test_assigned(self): self.assertTrue(self.spam.lookup("x").is_assigned()) self.assertTrue(self.spam.lookup("bar").is_assigned())