How to check if a variable exists in Python?

To check the existence of a local variable:

if 'myVar' in locals():
  # myVar exists.

To check the existence of a global variable:

if 'myVar' in globals():
  # myVar exists.

To check if an object has an attribute:

if hasattr(obj, 'attr_name'):
  # obj.attr_name exists.

How to check if a variable exists in Python?

The use of variables that have yet to been defined or set (implicitly or explicitly) is often a bad thing in any language, since it tends to indicate that the logic of the program hasn’t been thought through properly, and is likely to result in unpredictable behaviour.

If you need to do it in Python, the following trick, which is similar to yours, will ensure that a variable has some value before use:

except NameError:
    myVar = None      # or some other default value.

# Now you're free to use myVar without Python complaining.

However, I’m still not convinced that’s a good idea – in my opinion, you should try to refactor your code so that this situation does not occur.

By way of an example, the following code was given below in a comment, to allow line drawing from a previous point to the current point:

if last:
    draw(last, current);
last = current

In the case where last has not been bound to a value, that won’t help in Python at all since even the checking of last will raise an exception. A better idea would be to ensure last does have a value, one that can be used to decide whether or not it is valid. That would be something like:

last = None

# some time passes ...

if last is not None:
    draw(last, current);
last = current

That ensures the variable exists and that you only use it if it’s valid for what you need it for. This is what I assume the if last was meant to do in the comment code (but didn’t), and you can still add the code to force this if you have no control over the initial setting of the variable, using the exception method above:

# Variable 'last' may or may not be bound to a value at this point.

except NameError:
    last = None

# It will always now be bound to a value at this point.

if last is not None:
    draw(last, current);
last = current

Answer #3:

A simple way is to initialize it at first saying myVar = None

Then later on:

if myVar is not None:
    # Do something

Answer #4:

Using try/except is the best way to test for a variable’s existence. But there’s almost certainly a better way of doing whatever it is you’re doing than setting/testing global variables.

For example, if you want to initialize a module-level variable the first time you call some function, you’re better off with code something like this:

my_variable = None

def InitMyVariable():
  global my_variable
  if my_variable is None:
    my_variable = ...

How to check if a variable exists in Python?

For objects/modules, you can also

'var' in dir(obj)

For example,

>>> class Something(object):
...     pass
>>> c = Something()
>>> c.a = 1
>>> 'a' in dir(c)
>>> 'b' in dir(c)

A way that often works well for handling this kind of situation is to not explicitly check if the variable exists but just go ahead and wrap the first usage of the possibly non-existing variable in a try/except NameError:

# Search for entry.
for x in y:
  if x == 3:
    found = x

# Work with found entry.
  print('Found: {0}'.format(found))
except NameError:
  print('Not found')
  # Handle rest of Found case here

Query statement:

I want to check if a variable exists. Now I’m doing something like this:

except NameError:
   # Do something.

Are there other ways without exceptions?

Hope you learned something from this post.

Follow Programming Articles for more!

About ᴾᴿᴼᵍʳᵃᵐᵐᵉʳ

Linux and Python enthusiast, in love with open source since 2014, Writer at, India.

View all posts by ᴾᴿᴼᵍʳᵃᵐᵐᵉʳ →