Python isinstance() Function Explained

isinstance() checks whether a value matches a type.

It is a built-in Python function that returns either True or False. It is often used before running code that depends on a value being a string, number, list, tuple, or dictionary.

In many cases, isinstance() is a better choice than checking type() directly because it also works with parent and child types.

Quick answer #

value = 10

print(isinstance(value, int))   # True
print(isinstance(value, str))   # False

Use isinstance(object, classinfo) to check whether a value matches a type or one of its parent types.

What isinstance() does #

isinstance() is used to test a value against a type.

It:

  • Checks whether a value is an instance of a type
  • Returns True or False
  • Helps you safely run type-specific code
  • Is commonly used with str, int, list, tuple, and dict

This is useful when your code needs to behave differently for different kinds of data.

For example, you might want to:

  • loop through a list
  • join text only if a value is a string
  • do math only if a value is a number

If you need a refresher on Python types, see Python data types overview or what a data type means in Python.

Basic syntax #

The syntax is:

isinstance(object, classinfo)

Parts of the syntax #

  • object is the value you want to test
  • classinfo is the type to check against, such as int, str, list, or dict
  • The result is always a Boolean value: True or False

Example:

name = "Maya"

print(isinstance(name, str))

Output:

True

Simple example #

Here is a small example that checks one value at a time.

Check an integer #

value = 25

print(isinstance(value, int))
print(isinstance(value, str))

Output:

True
False

Check text #

text = "hello"

print(isinstance(text, str))
print(isinstance(text, int))

Output:

True
False

In both examples, isinstance() only checks the type. It does not change the value.

If you want to change a value from one type to another, that is conversion, not type checking. For example, see how to convert a string to an integer in Python.

Checking against multiple types #

The second argument can be a tuple of types.

This is helpful when more than one type is acceptable.

value = 3.5

print(isinstance(value, (int, float)))
print(isinstance(value, (str, list)))

Output:

True
False

This is much cleaner than writing long or conditions.

Instead of this:

value = 3.5

print(type(value) == int or type(value) == float)

you can write this:

value = 3.5

print(isinstance(value, (int, float)))

A common use case is accepting both integers and decimal numbers as numeric input.

isinstance() vs type() #

Both isinstance() and type() are related to types, but they are not the same.

type(value) == int #

This checks for one exact type.

value = 10
print(type(value) == int)

isinstance(value, int) #

This checks whether the value matches that type, including inherited types.

value = 10
print(isinstance(value, int))

For beginners, isinstance() is usually the safer choice when you want to know whether a value can be treated like a certain type.

In everyday code:

  • use type() when you need the exact type
  • use isinstance() when you want a practical type check

Common real uses #

Here are some common beginner-friendly uses for isinstance().

Validate function inputs #

def repeat_text(text, count):
    if not isinstance(text, str):
        return "text must be a string"
    
    if not isinstance(count, int):
        return "count must be an integer"
    
    return text * count

print(repeat_text("Hi ", 3))
print(repeat_text("Hi ", "3"))

Output:

Hi Hi Hi 
count must be an integer

This can help prevent errors such as unsupported operand type errors.

Handle strings and lists differently #

value = ["a", "b", "c"]

if isinstance(value, str):
    print("This is text")
elif isinstance(value, list):
    print("This is a list")

Output:

This is a list

Check data before converting #

value = "42"

if isinstance(value, str):
    number = int(value)
    print(number)

Output:

42

This is useful when working with user input, since input often starts as text.

Prevent errors before using methods or loops #

value = {"name": "Ana"}

if isinstance(value, dict):
    print(value["name"])

Output:

Ana

Checking first can help you avoid confusing TypeError messages later.

Common beginner mistakes #

Passing "int" instead of int #

Wrong:

value = 10
print(isinstance(value, "int"))

"int" is a string, not a type.

Correct:

value = 10
print(isinstance(value, int))

Using square brackets for multiple types #

Wrong:

value = 5
print(isinstance(value, [int, float]))

The second argument should be a type or a tuple of types.

Correct:

value = 5
print(isinstance(value, (int, float)))

Thinking isinstance() converts a value #

Wrong idea:

value = "123"
result = isinstance(value, int)

print(result)

Output:

False

This does not convert "123" into 123. It only checks the type.

If your goal is conversion, use int(value) instead.

Assuming it changes the value #

isinstance() does not modify anything.

value = "100"

print(isinstance(value, str))
print(value)

Output:

True
100

The value stays the same.

Debugging tips #

If you are not sure what kind of value you have, these checks are useful:

print(type(value))
print(isinstance(value, int))
print(isinstance(value, (int, float)))
print(repr(value))

These can help when:

  • a value looks like a number but is actually a string
  • you are getting a TypeError
  • your condition is not behaving as expected
  • the second argument to isinstance() is invalid

Common causes of mistakes include:

  • using 'int' or 'str' as text instead of int or str
  • expecting isinstance() to convert a value
  • using type() when inherited types should also match
  • passing an invalid second argument

If you get an error because Python expected a number but found text, see TypeError: 'str' object cannot be interpreted as an integer.

FAQ #

What does isinstance() return in Python? #

It returns True if the value matches the given type, otherwise False.

Can isinstance() check more than one type? #

Yes. Pass a tuple of types, such as isinstance(x, (int, float)).

What is the difference between isinstance() and type()? #

type() gives the exact type. isinstance() checks whether a value matches a type and also supports inheritance.

Does isinstance() convert a value? #

No. It only checks the type. It does not change the value.

See also #

Press Esc to close