Идите и используйте, 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.