Use isinstance(value, str) to check whether a Python value is a string. It returns True for strings, including subclasses of str, and False for other types.
Use isinstance() for the usual runtime check
Pass the value and the str type to Python’s built-in isinstance() function:
value = "hello"
if isinstance(value, str):
print("value is a string")
else:
print("value is not a string")
This checks the object’s type relationship at runtime. For example, an integer does not pass the check:
value = 42
print(isinstance(value, str)) # False
The Python Software Foundation’s Programming FAQ recommends the built-in isinstance(obj, cls) function for checking whether an object is an instance of a class, including isinstance(obj, str).
The Tool Desk
Outbyte Driver Updater FREEScan for outdated or missing drivers - takes under a minuteDriver Scan →Outbyte PC Repair FREEClear out junk files and repair common Windows errorsFree Scan →#1 Best Overall
When to use an exact type check
isinstance(value, str) also returns True when value is an instance of a subclass of str. If your code specifically requires the exact built-in str type and should reject subclasses, use:
type(value) is str
Choose the check that matches the requirement: use isinstance() for the normal “is this text?” question, and the exact-type check only when subclasses must be excluded.
Rank #2
Do not use str() to test the original type
str(value) converts a value to a string representation; it does not tell you whether the value was already a string. For instance:
value = 42
isinstance(value, str) # False
str(value) # '42'
Python’s built-in types documentation describes str as a constructor. Use isinstance() when you need to test the existing value without converting it.
Check bytes separately from text
Python’s str type represents text as immutable sequences of Unicode code points. bytes is a separate type for binary data, so a bytes value does not pass an isinstance(value, str) check:
value = b"hello"
print(isinstance(value, str)) # False
If the bytes contain text you need to work with, decode them using the encoding that matches the data:
text = value.decode("utf-8")
print(isinstance(text, str)) # True
UTF-8 is an example, not a guarantee that every byte sequence uses that encoding. Also, str(value) does not decode bytes: without encoding arguments, it produces a printable representation, such as "b'Zoot!'" for b'Zoot!', as the Python documentation explains.
Runtime checks versus type annotations
A type annotation communicates an expected type to readers and static type checkers; it does not replace a runtime check when your program must inspect an arbitrary value. For a runtime decision, use isinstance(value, str). See Python’s typing documentation for type hints.
Windows Errors? Fix Them Before They Spread
Repair common Windows errors and clear accumulated junk for a smoother, more stable PC - no reinstall needed.Free scan · no reinstallCrashes, No Sound, or Screen Glitches?
Random freezes, missing sound and display glitches usually trace back to one bad driver. Find and replace yours safely.Free scan · under a minuteQuick Recap
Best Value
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.




