bpo-42355: symtable.get_namespace() now checks whether there are multiple or any namespaces found (GH-23278)

This commit is contained in:
Batuhan Taskaya 2021-07-18 15:56:09 +03:00 committed by GitHub
parent 8f50f44592
commit a045991f60
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 13 additions and 5 deletions

View File

@ -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.

View File

@ -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

View File

@ -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())