Is it possible only to declare a variable without assigning any value in Python?

PythonVariable AssignmentVariable Declaration

Python Problem Overview

Is it possible to declare a variable in Python, like so?:


so that it initialized to None? It seems like Python allows this, but as soon as you access it, it crashes. Is this possible? If not, why?

EDIT: I want to do this for cases like this:


for index in sequence:

   if value == None and conditionMet:
       value = index

Python Solutions

Solution 1 - Python

Why not just do this:

var = None

Python is dynamic, so you don't need to declare things; they exist automatically in the first scope where they're assigned. So, all you need is a regular old assignment statement as above.

This is nice, because you'll never end up with an uninitialized variable. But be careful -- this doesn't mean that you won't end up with incorrectly initialized variables. If you init something to None, make sure that's what you really want, and assign something more meaningful if you can.

Solution 2 - Python

In Python 3.6+ you could use Variable Annotations for this:

PEP 484 introduced type hints, a.k.a. type annotations. While its main focus was function annotations, it also introduced the notion of type comments to annotate variables:

# 'captain' is a string (Note: initial value is a problem)
captain = ...  # type: str

PEP 526 aims at adding syntax to Python for annotating the types of variables (including class variables and instance variables), instead of expressing them through comments:

captain: str  # Note: no initial value!

It seems to be more directly in line with what you were asking "Is it possible only to declare a variable without assigning any value in Python?"

Solution 3 - Python

I'd heartily recommend that you read Other languages have "variables" (I added it as a related link) – in two minutes you'll know that Python has "names", not "variables".

val = None
# ...
if val is None:
   val = any_object

Solution 4 - Python

I'm not sure what you're trying to do. Python is a very dynamic language; you don't usually need to declare variables until you're actually going to assign to or use them. I think what you want to do is just

foo = None

which will assign the value None to the variable foo.

EDIT: What you really seem to want to do is just this:

#note how I don't do *anything* with value here
#we can just start using it right inside the loop

for index in sequence:
   if conditionMet:
       value = index

except NameError:
    print "Didn't find anything"

It's a little difficult to tell if that's really the right style to use from such a short code example, but it is a more "Pythonic" way to work.

EDIT: below is comment by JFS (posted here to show the code)

Unrelated to the OP's question but the above code can be rewritten as:
for item in sequence:
    if some_condition(item): 
       found = True
else: # no break or len(sequence) == 0
    found = False

if found:

NOTE: if some_condition() raises an exception then found is unbound.
NOTE: if len(sequence) == 0 then item is unbound.

The above code is not advisable. Its purpose is to illustrate how local variables work, namely whether "variable" is "defined" could be determined only at runtime in this case. Preferable way:

for item in sequence:
    if some_condition(item):


found = False
for item in sequence:
    if some_condition(item):
       found = True

if found:

Solution 5 - Python

Well, if you want to check if a variable is defined or not then why not check if its in the locals() or globals() arrays? Your code rewritten:

for index in sequence:
   if 'value' not in globals() and conditionMet:
       value = index

If it's a local variable you are looking for then replace globals() with locals().

Solution 6 - Python

I usually initialize the variable to something that denotes the type like

var = ""


var = 0

If it is going to be an object then don't initialize it until you instantiate it:

var = Var()

Solution 7 - Python

First of all, my response to the question you've originally asked

Q: How do I discover if a variable is defined at a point in my code?

A: Read up in the source file until you see a line where that variable is defined.

But further, you've given a code example that there are various permutations of that are quite pythonic. You're after a way to scan a sequence for elements that match a condition, so here are some solutions:

def findFirstMatch(sequence):
    for value in sequence:
        if matchCondition(value):
            return value

    raise LookupError("Could not find match in sequence")

Clearly in this example you could replace the raise with a return None depending on what you wanted to achieve.

If you wanted everything that matched the condition you could do this:

def findAllMatches(sequence):
    matches = []
    for value in sequence:
        if matchCondition(value):

    return matches

There is another way of doing this with yield that I won't bother showing you, because it's quite complicated in the way that it works.

Further, there is a one line way of achieving this:

all_matches = [value for value in sequence if matchCondition(value)]

Solution 8 - Python

If I'm understanding your example right, you don't need to refer to 'value' in the if statement anyway. You're breaking out of the loop as soon as it could be set to anything.

value = None
for index in sequence:
   if conditionMet:
       value = index

Solution 9 - Python

You look like you're trying to write C in Python. If you want to find something in a sequence, Python has builtin functions to do that, like

value = sequence.index(blarg)

Solution 10 - Python

If None is a valid data value then you need to the variable another way. You could use:

var = object()

This sentinel is suggested by Nick Coghlan.

Solution 11 - Python

It is a good question and unfortunately bad answers as var = None is already assigning a value, and if your script runs multiple times it is overwritten with None every time.

It is not the same as defining without assignment. I am still trying to figure out how to bypass this issue.

Solution 12 - Python

Is it possible to declare a variable in Python (var=None):

def decl_var(var=None):
if var is None:
    var = []
return var

Solution 13 - Python

var_str = str()
var_int = int()

Solution 14 - Python

You can trick an interpreter with this ugly oneliner if None: var = None It do nothing else but adding a variable var to local variable dictionary, not initializing it. Interpreter will throw the UnboundLocalError exception if you try to use this variable in a function afterwards. This would works for very ancient python versions too. Not simple, nor beautiful, but don't expect much from python.

Solution 15 - Python

I know it's coming late but with python3, you can declare an uninitialized value by using


# some code logic

uninitialized_value = "Value"

But be very careful with this trick tho, because


# some code logic

uninitialized_value += "Extra value\n"


All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJoan VengeView Question on Stackoverflow
Solution 1 - PythonTodd GamblinView Answer on Stackoverflow
Solution 2 - PythonTagarView Answer on Stackoverflow
Solution 3 - PythonjfsView Answer on Stackoverflow
Solution 4 - PythonkquinnView Answer on Stackoverflow
Solution 5 - PythonJohanView Answer on Stackoverflow
Solution 6 - PythonAndrew HareView Answer on Stackoverflow
Solution 7 - PythonJerubView Answer on Stackoverflow
Solution 8 - PythonNails N.View Answer on Stackoverflow
Solution 9 - PythonKenView Answer on Stackoverflow
Solution 10 - PythonChris_RandsView Answer on Stackoverflow
Solution 11 - PythonzinturisView Answer on Stackoverflow
Solution 12 - PythonPashaView Answer on Stackoverflow
Solution 13 - PythonZaurView Answer on Stackoverflow
Solution 14 - PythonZABView Answer on Stackoverflow
Solution 15 - PythonEkure EdemView Answer on Stackoverflow