Проверка типов

При преобразовании типов данных могут возникнуть ошибки такого рода:

In [1]: int('a')
------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-42-b3c3f4515dd4> in <module>()
----> 1 int('a')
ValueError: invalid literal for int() with base 10: 'a'

Ошибка абсолютно логичная. Мы пытаемся преобразовать в десятичный формат строку 'a'.

И если тут пример выглядит, возможно, глупым, тем не менее, когда нужно, например, пройтись по списку строк и преобразовать в числа те из них, которые содержат числа, можно получить такую ошибку.

Чтобы избежать её, было бы хорошо иметь возможность проверить, с чем мы работаем.

isdigit()

В Python такие методы есть. Например, чтобы проверить, состоит ли строка из одних цифр, можно использовать метод isdigit():

In [2]: "a".isdigit()
Out[2]: False
In [3]: "a10".isdigit()
Out[3]: False
In [4]: "10".isdigit()
Out[4]: True

Пример использования метода:

In [5]: vlans = ['10', '20', '30', '40', '100-200']
In [6]: [ int(vlan) for vlan in vlans if vlan.isdigit() ]
Out[6]: [10, 20, 30, 40]

isalpha()

Метод isalpha() позволяет проверить, состоит ли строка из одних букв:

In [7]: "a".isalpha()
Out[7]: True
In [8]: "a100".isalpha()
Out[8]: False
In [9]: "a-- ".isalpha()
Out[9]: False
In [10]: "a ".isalpha()
Out[10]: False

isalnum()

Метод isalnum() позволяет проверить, состоит ли строка из букв и цифр:

In [11]: "a".isalnum()
Out[1]: True
In [12]: "a10".isalnum()
Out[12]: True

type()

Иногда, в зависимости от результата, библиотека или функция может выводить разные типы объектов. Например, если объект один, возращается строка, если несколько, то возвращается кортеж.

Нам же надо построить ход программы по-разному, в зависимости от того, была ли возвращена строка или кортеж.

В этом может помочь функция type():

In [13]: type("string")
Out[13]: str
In [14]: type("string") is str
Out[14]: True

Аналогично с кортежем (и другими типами данных):

In [15]: type((1,2,3))
Out[15]: tuple
In [16]: type((1,2,3)) is tuple
Out[16]: True
In [17]: type((1,2,3)) is list
Out[17]: False