Идите и используйте, isinstance
если вам это нужно. Это несколько плохо, поскольку исключает пользовательские последовательности, итераторы и другие вещи, которые вам могут понадобиться. Однако иногда вам нужно вести себя иначе, если кто-то, например, передает строку. Мое предпочтение было бы явно проверить str
или unicode
вот так:
import types
isinstance(var, types.StringTypes)
NB Не принимайте types.StringType
за types.StringTypes
. Последний включает в себя str
и unicode
объекты.
types
Модуль рассматривается многими устаревшими в пользу просто проверка непосредственно против типа объекта, так что если вы не хотите использовать выше, вы можете альтернативно проверить явно против str
и unicode
, как это:
isinstance(var, (str, unicode)):
Редактировать:
Еще лучше:
isinstance(var, basestring)
Конец редактирования
После любого из них вы можете вернуться к поведению, как будто вы получаете нормальную последовательность, позволяя непоследовательности вызывать соответствующие исключения.
Видите, что «зло» в проверке типов заключается не в том, что вы, возможно, захотите вести себя по-разному для определенного типа объектов, а в том, что вы искусственно ограничиваете свою функцию от правильных действий с неожиданными типами объектов, которые в противном случае сделали бы правильные вещи. Если у вас есть последний запасной вариант, который не проверен, вы удалите это ограничение. Следует отметить, что слишком большая проверка типов является запахом кода, который указывает на то, что вы, возможно, захотите провести некоторый рефакторинг, но это не обязательно означает, что вы должны избегать его из getgo.