Конструкция try..except
try..except имеет следующее формальное определение, смотрим пример:
Весь основной код, в котором потенциально может возникнуть исключение, помещается после ключевого слова try. Если в этом коде генерируется исключение, то работа кода в блоке try прерывается, и выполнение переходит в блок except.
После ключевого слова except опционально можно указать, какое исключение будет обрабатываться (например, ValueError или KeyError). После слова except на следующей стоке идут инструкции блока except, выполняемые при возникновении исключения.
Рассмотрим обработку исключения на примере преобразовании строки в число, вторая часть примера:
При вводе строки вывод числа на консоль не происходит, а выполнение программы переходит к блоку except. Но при вводе правильного числа все выполняется нормально, исключение не возникает, и соответственно блок except не выполняется.
🐍 Укус питона // 💬 Чат // #теория #конструкции #try_except
try..except имеет следующее формальное определение, смотрим пример:
Весь основной код, в котором потенциально может возникнуть исключение, помещается после ключевого слова try. Если в этом коде генерируется исключение, то работа кода в блоке try прерывается, и выполнение переходит в блок except.
После ключевого слова except опционально можно указать, какое исключение будет обрабатываться (например, ValueError или KeyError). После слова except на следующей стоке идут инструкции блока except, выполняемые при возникновении исключения.
Рассмотрим обработку исключения на примере преобразовании строки в число, вторая часть примера:
При вводе строки вывод числа на консоль не происходит, а выполнение программы переходит к блоку except. Но при вводе правильного числа все выполняется нормально, исключение не возникает, и соответственно блок except не выполняется.
🐍 Укус питона // 💬 Чат // #теория #конструкции #try_except
Что выведет этот код?
Anonymous Quiz
36%
0 2 3 10
11%
32 34 35 42
28%
48 64 72 128
25%
48 144 192 480
Класс object. Строковое представление объекта
Начиная с 3-й версии в языке программирования Python все классы неявно имеют один общий суперкласс - object и все классы по умолчанию наследуют его методы.
Одним из наиболее используемых методов класса object является метод str(). Когда необходимо получить строковое представление объекта или вывести объект в виде строки, то Python как раз вызывает этот метод. И при определении класса хорошей практикой считается переопределение этого метода.
К примеру, возьмем класс Person и выведем его строковое представление, смотрим пример:
При запуске программа выведет что-то наподобие следующего, вторая часть кода:
Это не очень информативная информация об объекте. Мы, конечно, можем выйти из положения, определив в классе Person дополнительный метод, который выводит данные объекта - в примере выше это метод display_info.
🐍 Укус питона // 💬 Чат // #теория #классы #object
Начиная с 3-й версии в языке программирования Python все классы неявно имеют один общий суперкласс - object и все классы по умолчанию наследуют его методы.
Одним из наиболее используемых методов класса object является метод str(). Когда необходимо получить строковое представление объекта или вывести объект в виде строки, то Python как раз вызывает этот метод. И при определении класса хорошей практикой считается переопределение этого метода.
К примеру, возьмем класс Person и выведем его строковое представление, смотрим пример:
При запуске программа выведет что-то наподобие следующего, вторая часть кода:
Это не очень информативная информация об объекте. Мы, конечно, можем выйти из положения, определив в классе Person дополнительный метод, который выводит данные объекта - в примере выше это метод display_info.
🐍 Укус питона // 💬 Чат // #теория #классы #object
Класс object. Строковое представление. Продолжение.
Рассмотрим другой выход решения проблемы недостаточной информации об объекте - определим в классе Person метод str() (по два подчеркивания с каждой стороны), смотрим код:
Метод str должен возвращать строку. И в данном случае мы возвращаем базовую информацию о человеке. Если нам потребуется использовать эту информацию в других методах класса, то мы можем использовать выражение self.str()
И теперь консольный вывод будет другим, нижняя часть примера:
🐍 Укус питона // 💬 Чат // #теория #классы #object
Рассмотрим другой выход решения проблемы недостаточной информации об объекте - определим в классе Person метод str() (по два подчеркивания с каждой стороны), смотрим код:
Метод str должен возвращать строку. И в данном случае мы возвращаем базовую информацию о человеке. Если нам потребуется использовать эту информацию в других методах класса, то мы можем использовать выражение self.str()
И теперь консольный вывод будет другим, нижняя часть примера:
🐍 Укус питона // 💬 Чат // #теория #классы #object
Что выведет этот код?
Anonymous Quiz
30%
[[[2, 3, 9]], [[2, 3, 9]], [[2, 3, 9]]]
42%
[[2, 3, 9], [2, 3, 9], [2, 3, 9]]
6%
[[[2, 3, 9]], [[2, 3, 9]]]
22%
Нет правильного ответа.
Обращение к символам строки
И мы можем обратиться к отдельным символам строки по индексу в квадратных скобках, смотрим пример:
Индексация начинается с нуля, поэтому первый символ строки будет иметь индекс 0. А если мы попытаемся обратиться к индексу, которого нет в строке, то мы получим исключение IndexError. Например, в случае выше длина строки 11 символов, поэтому ее символы будут иметь индексы от 0 до 10.
🐍 Укус питона // 💬 Чат // #теория #данные #переменные
И мы можем обратиться к отдельным символам строки по индексу в квадратных скобках, смотрим пример:
Индексация начинается с нуля, поэтому первый символ строки будет иметь индекс 0. А если мы попытаемся обратиться к индексу, которого нет в строке, то мы получим исключение IndexError. Например, в случае выше длина строки 11 символов, поэтому ее символы будут иметь индексы от 0 до 10.
🐍 Укус питона // 💬 Чат // #теория #данные #переменные
Обращение к символам строки. Продолжение.
Чтобы получить доступ к символам, начиная с конца строки, можно использовать отрицательные индексы. Так, индекс -1 будет представлять последний символ, а -2 - предпоследний символ и так далее, первая часть кода:
При работе с символами следует учитывать, что строка - это неизменяемый (immutable) тип, поэтому если мы попробуем изменить какой-то отдельный символ строки, то мы получим ошибку, как в следующем случае, вторая часть кода:
Мы можем только полностью переустановить значение строки, присвоив ей другое значение.
🐍 Укус питона // 💬 Чат // #теория #данные #переменные
Чтобы получить доступ к символам, начиная с конца строки, можно использовать отрицательные индексы. Так, индекс -1 будет представлять последний символ, а -2 - предпоследний символ и так далее, первая часть кода:
При работе с символами следует учитывать, что строка - это неизменяемый (immutable) тип, поэтому если мы попробуем изменить какой-то отдельный символ строки, то мы получим ошибку, как в следующем случае, вторая часть кода:
Мы можем только полностью переустановить значение строки, присвоив ей другое значение.
🐍 Укус питона // 💬 Чат // #теория #данные #переменные
Массивы в pattern matching.
В качестве шаблонов также могут выступать массивы. Подобным шаблоны также могут содержать либо конкретные значения, либо переменные, которые передаются элементы массивов, либо символ прочерка _, если элемент массива не важен.
В данном случае функция print_people принимает массив, который, как предполагается, состоит из трех элементов, рассмотрим их в следующей части.
🐍 Укус питона // 💬 Чат // #теория #pattern_matching #массивы
В качестве шаблонов также могут выступать массивы. Подобным шаблоны также могут содержать либо конкретные значения, либо переменные, которые передаются элементы массивов, либо символ прочерка _, если элемент массива не важен.
В данном случае функция print_people принимает массив, который, как предполагается, состоит из трех элементов, рассмотрим их в следующей части.
🐍 Укус питона // 💬 Чат // #теория #pattern_matching #массивы
Массивы в pattern matching. Продолжение.
Первый шаблон предполагает, что элементы массива имеют определенные значения, смотрим первую часть примера:
В данном случае первый элемент массива должен представлять строку "Tom", второй - строку "Sam" и третий - строку "Bob".
Второй шаблон предполагает, что первый элемент массива должен быть равне строке "Tom", остальные два элемента могут иметь произвольные значения, вторая часть примера:
При этом значение второго элемента передается в переменную second, а значение третьего элемента не важно, поэтому вместо него применяется прочерк.
Третий шаблон соответствует любому массиву из трех элементов. При этом его элементы передаются в переменные first, second и third, третья часть кода:
В данном случае для соответствия любому из шаблонов массив должен был иметь три элемента. Но также можно определять шаблоны для массивов разной длины, последняя часть примера:
🐍 Укус питона // 💬 Чат // #теория #pattern_matching #массивы
Первый шаблон предполагает, что элементы массива имеют определенные значения, смотрим первую часть примера:
В данном случае первый элемент массива должен представлять строку "Tom", второй - строку "Sam" и третий - строку "Bob".
Второй шаблон предполагает, что первый элемент массива должен быть равне строке "Tom", остальные два элемента могут иметь произвольные значения, вторая часть примера:
При этом значение второго элемента передается в переменную second, а значение третьего элемента не важно, поэтому вместо него применяется прочерк.
Третий шаблон соответствует любому массиву из трех элементов. При этом его элементы передаются в переменные first, second и third, третья часть кода:
В данном случае для соответствия любому из шаблонов массив должен был иметь три элемента. Но также можно определять шаблоны для массивов разной длины, последняя часть примера:
🐍 Укус питона // 💬 Чат // #теория #pattern_matching #массивы