What's the canonical way to check for type in Python?

python, types

Solution

Use `isinstance` to check if `o` is an instance of `str` or any subclass of `str`:

if isinstance(o, str):

To check if the type of `o` is exactly `str`, excluding subclasses of `str`:

if type(o) is str:

See Built-in Functions in the Python Library Reference for relevant information.

Checking for strings in Python 2

For Python 2, this is a better way to check if `o` is a string:

if isinstance(o, basestring):

because this will also catch Unicode strings. `unicode` is not a subclass of `str`; both `str` and `unicode` are subclasses of `basestring`. In Python 3, `basestring` no longer exists since there's a strict separation of strings (`str`) and binary data (`bytes`).

Alternatively, `isinstance` accepts a tuple of classes. This will return `True` if `o` is an instance of any subclass of any of `(str, unicode)`:

if isinstance(o, (str, unicode)):

Problem

How do I check if an object is of a given type, or if it inherits from a given type? How do I check if the object `o` is of type `str`? Beginners often wrongly expect the string to already be "a number" - either expecting Python 3.x `input` to convert type, or expecting that a string like `'1'` is also simultaneously an integer. This is the wrong canonical for those questions. Please carefully read the question and then use How do I check if a string represents a number (float or int)?, How can I read inputs as numbers? and/or Asking the user for input until they give a valid response as appropriate.

Original source

Related problems