Ідіть і використовуйте, isinstanceякщо вам це потрібно. Це дещо зло, оскільки виключає спеціальні послідовності, ітератори та інші речі, які вам можуть знадобитися насправді. Однак іноді потрібно поводитись інакше, якщо хтось, наприклад, передає рядок. Мої переваги полягають у тому, щоб явно перевірити strчи unicodeтак:
import types
isinstance(var, types.StringTypes)
Примітка : не плутайте types.StringTypeдля types.StringTypes. Останній включає strі unicodeоб'єкти.
typesМодуль розглядається багатьма застарілими на користь просто перевірка безпосередньо проти типу об'єкта, так що якщо ви не хочете використовувати вище, ви можете альтернативно перевірити явно проти strі unicode, як це:
isinstance(var, (str, unicode)):
Редагувати:
Ще краще:
isinstance(var, basestring)
Закінчити редагування
Після будь-якого з них ви можете повернутися до поведінки так, ніби отримуєте нормальну послідовність, дозволяючи не послідовності створювати відповідні винятки.
Дивіться, що "зло" щодо перевірки типів - це не те, що ви можете поводитись по-різному для певного типу об'єктів, це те, що ви штучно обмежуєте свою функцію в тому, щоб робити правильну справу з несподіваними типами об'єктів, які в іншому випадку зробили б правильно. Якщо у вас є остаточна резервна копія, яка не перевірена типом, ви видалите це обмеження. Слід зазначити, що занадто велика перевірка типу - це запах коду, який вказує на те, що ви можете зробити якийсь рефакторинг, але це не обов'язково означає, що слід уникати цього з Getgo.