Используйте, isinstance чтобы проверить, является ли o экземпляром str или любым подклассом str:
ifisinstance(o, str):
Чтобы проверить, является ли тип o точным str, исключая подклассы str:
iftype(o) isstr:
Смотрите Встроенные функции в справочнике по библиотеке Python для получения соответствующей информации.
Проверка наличия строк в Python 2
Для Python 2 это лучший способ проверить, является ли o строкой:
ifisinstance(o, basestring):
потому что это также будет перехватывать строки Unicode. unicode не является подклассом str; оба str и unicode являются подклассами basestring. В Python 3 он basestring больше не существует, поскольку существует строгое разделение строк (str) и двоичных данных (bytes).
В качестве альтернативы, isinstance принимает кортеж классов. Это вернет, True если o является экземпляром любого подкласса любого из (str, unicode):
ifisinstance(o, (str, unicode)):
Ответ 2
Самый питоновский способ проверки типа объекта... не проверять его.
Поскольку Python поощряет утиный ввод, вы должны просто try...except использовать методы объекта так, как вы хотите их использовать. Итак, если ваша функция ищет файловый объект с возможностью записи, не проверяйте, что это подкласс file, просто попробуйте использовать его .write() метод!
Конечно, иногда эти приятные абстракции ломаются, и isinstance(obj, cls) это то, что вам нужно. Но используйте экономно.
Ответ 3
isinstance(o, str) вернет, True если o это str или имеет тип, который наследуется от str.
type(o) is str вернет True тогда и только тогда, когда o является str. Он вернет, False если o имеет тип, который наследуется от str.
Ответ 4
В Python 3.10 вы можете использовать | в isinstance: