При преобразовании типов данных могут возникнуть ошибки такого рода:
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