In Python, a NameError
exception is raised when a name is not found in the local or global namespace.
For example a NameError
is raised when a variable or function is referenced before it has been defined, or when the value of a variable is accessed outside of its scope.
print(a)
The general causes of NameError are:
-
Using undefined variables
#The variable b is not defined resulting to a NameError
print(b)
-
Misspelled identifiers
#The print function is misspelled below leading to a NameError
prnt("Hello, World!")
-
Using variables before they are defined
#variable a is used befor it is defined
print(a)
a = 1000
-
Incorrect usage of scope
#A name error is raised because we try to access variable a outside its scope.
def func():
a = 100
func()
print(a)
Avoiding and Handling NameError Exceptions
The most obvious way to fix the NameError
exception is to ensure that your code is using the correct names for variables and objects. Make sure to double-check all variable names and object names.
Python keeps a dictionary of all the variables defined in the global and another for variables defined in the local namespaces. You can access these dictionaries using the built-in functions globals() and locals() respectively. This allows us to check whether a variable is already assigned using the "in"
operator before using it . For example:
x = 100
if "x" in locals():
x = x * 2
print(x)
Just like other exceptions, you can also use try-except
blocks for catching and handling the NameError
.
try:
print(x)
except NameError as e:
print("no variable named x.")