Книга: PyNEng
Назад: Преобразование типов
Дальше: Дополнительные материалы

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

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

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

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 
Назад: Преобразование типов
Дальше: Дополнительные материалы