Друзья, сегодня поговорим об ошибке
Эта ошибка возникает, если в программе присутствует незавершенный строковый литерал: например, у строки нет закрывающей кавычки или открывающая и закрывающая кавычки не совпадают.
❓ Где же мы ошиблись в нашей программе?
Дело в том, что список
‼️ ‼️ ‼️ ❗️ Открывающие и закрывающие кавычки в строке должны быть одинаковыми. Если мы используем одинарную открывающую кавычку, то закрывающая тоже должна быть одинарной.
Эта ошибка встречается и при работе с многострочными строками: например, когда многострочная строка заключена в одинарные кавычки (
Как избежать этой ошибки?
1️⃣ Использовать для создания многострочной строки тройные кавычки (
2️⃣ Добавить символ переноса фрагмента строки на следующую строку (
Ставьте реакцию:
😎 — если сразу нашли ошибку в коде
👀 — если ошибку отыскать не удалось
#python #полезныйматериал #чтоозначаетошибка
SyntaxError: unterminated string literal
. 🤓Эта ошибка возникает, если в программе присутствует незавершенный строковый литерал: например, у строки нет закрывающей кавычки или открывающая и закрывающая кавычки не совпадают.
Дело в том, что список
books
содержит строковый литерал 'Fluent Python"
с разными открывающей и закрывающей кавычками. Эта ошибка встречается и при работе с многострочными строками: например, когда многострочная строка заключена в одинарные кавычки (
'
или "
):text = 'Python is a high-level,
general-purpose
programming language'
Как избежать этой ошибки?
'''
или """
):text = '''Python is a high-level,
general-purpose
programming language'''
\
):text = 'Python is a high-level, \
general-purpose \
programming language'
Ставьте реакцию:
😎 — если сразу нашли ошибку в коде
👀 — если ошибку отыскать не удалось
#python #полезныйматериал #чтоозначаетошибка
Please open Telegram to view this post
VIEW IN TELEGRAM
👀105😎49👍19 7❤3🤔2🏆1🍾1 1
Друзья, а вы знали, что оператор
📌 Оператор
1️⃣ С оператором
В конструкции
2️⃣ С оператором
В конструкции
3️⃣ С циклами
В конструкциях
✔️ Во всех перечисленных сценариях оператор
‼️ ‼️ ‼️ ❗️ Оператор
Ставьте реакцию:
😎 — если знали все варианты использования
👀 — если узнали о некоторых впервые
#python #полезныйматериал #else
else
используется не только с оператором if
, но и в других конструкциях Python?else
может использоваться в следующих сценариях:if
В конструкции
if/else
блок else
выполняется только тогда, когда не выполняется условие в if
, а в конструкции if/elif/else
— только тогда, когда не выполняется ни одно из условий в if
и elif
.try
В конструкции
try/except
блок else
выполняется только тогда, когда в блоке try
не возникло исключение.for
и while
В конструкциях
for/else
и while/else
блок else
выполняется только тогда, когда цикл завершился штатно, то есть не было преждевременного выхода из цикла с помощью оператора break
.else
не является обязательным, однако его использование в данных конструкциях часто упрощает чтение кода и позволяет в некоторых ситуациях отказаться, например, от флагов и дополнительных проверок.else
нельзя использовать отдельно от if
, for
, while
или блока try
. Он всегда должен быть частью конструкции, которая его поддерживает. Ставьте реакцию:
😎 — если знали все варианты использования
else
👀 — если узнали о некоторых впервые
#python #полезныйматериал #else
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👀205😎164👍21❤3✍2🔥2🤩1😍1👻1👨💻1👾1
Друзья, сегодня расскажем, в чем разница между понятиями "неизменяемый объект" и "хешируемый объект".
⭐ Часто новички говорят, что ключом словаря или элементом множества может быть только неизменяемый объект, однако это не совсем так. В данном случае правильней будет сказать, что ключом словаря или элементом множества может быть только хешируемый объект.
▫️ Неизменяемый объект — это объект, состояние которого не может быть изменено после создания.
▫️ Хешируемый объект — это объект, который имеет хеш-значение.
⭐ В Python хеш-значение (хеш) — это фиксированное целое число, идентифицирующее объект. Оно используется при поиске объектов в словаре и множестве, которые за кулисами являются хеш-таблицами. Следовательно, ключом словаря или элементом множества может быть только хешируемый объект.
⭐ Проверить, является ли объект хешируемым, можно с помощью встроенной функции
📌 Как правило, неизменяемые объекты являются хешируемыми, а изменяемые — нехешируемыми. Однако есть исключение: кортежи являются неизменяемыми, но могут быть хешируемыми и нехешируемыми в зависимости от своего содержимого:
▫️ кортеж является хешируемым, если все его элементы хешируемые
▫️ кортеж является нехешируемым, если хотя бы один из его элементов нехешируемый
Поскольку словари и множества допускают в качестве ключей и элементов только хешируемые объекты, нехешируемый кортеж не может быть ключом словаря или элементом множества.
Например, кортеж
Ставьте реакцию:
😎 — если знали, что кортежи могут быть хешируемыми и нехешируемыми
👀 — если слышите об этом впервые
🔝 🔝 🔝 Сохраняй пост в избранное, точно пригодится! ✍🏻
#python #полезныйматериал
hash()
, которая возвращает хеш-значение переданного объекта. Если переданный объект нехешируемый, функция возбуждает исключение TypeError
.Поскольку словари и множества допускают в качестве ключей и элементов только хешируемые объекты, нехешируемый кортеж не может быть ключом словаря или элементом множества.
Например, кортеж
(1, [2, 3])
содержит в качестве элемента нехешируемый список [2, 3]
, а значит, и сам кортеж не имеет хеш-значения. Поэтому при попытке добавить этот кортеж в множество будет возбуждено исключение TypeError: unhashable type: 'list'
.Ставьте реакцию:
😎 — если знали, что кортежи могут быть хешируемыми и нехешируемыми
👀 — если слышите об этом впервые
#python #полезныйматериал
Please open Telegram to view this post
VIEW IN TELEGRAM
21👀165😎67🔥16 9❤8😍1🍾1👻1👨💻1🎄1🆒1
Друзья, сегодня поговорим об аннотациях типов в Python.
Python является языком программирования с динамической типизацией. Это означает, что в разных участках программы одна и та же переменная может принимать значения разных типов. При этом ошибки, связанные с неверными типами объектов, выявляются во время выполнения кода. Поэтому такие ошибки важно обнаружить как можно раньше.
❤️ Аннотации типов (Type Hints) — это специальный синтаксис для объявления типов различных структур в программе. Эта функциональность появилась в Python 3.5 и совершенствуется с каждой новой версией языка.
❤️ Например, аннотации типов позволяют объявлять типы параметров функций и их возвращаемых значений.
В приведенном ниже коде:
❤️ запись
❤️ запись
❤️ Для аннотирования более сложных конструкций в Python используются инструменты из встроенного модуля
❤️ Аннотации типов игнорируются интерпретатором и никак не влияют на выполнение программы. Они используются для улучшения читаемости кода, а также для поиска ошибок типов до выполнения программы с помощью статических анализаторов (например, mypy).
❤️ Отметим, что аннотации типов не являются обязательными. Программист сам выбирает, аннотировать свой код или нет.
Почитать подробнее про аннотации типов можно в PEP 484 и PEP 526. Документация модуля
Ставьте реакцию:
😎 — если знали, что такое аннотации типов
👀 — если слышите о них впервые
🔝 🔝 🔝 Сохраняйте пост в избранное, точно пригодится! ✍🏻
#python #полезныйматериал #аннотациитипов #typehints
Python является языком программирования с динамической типизацией. Это означает, что в разных участках программы одна и та же переменная может принимать значения разных типов. При этом ошибки, связанные с неверными типами объектов, выявляются во время выполнения кода. Поэтому такие ошибки важно обнаружить как можно раньше.
В приведенном ниже коде:
def greet(name: str) -> str:
return f'Hello {name}!'
name: str
означает, что параметр name
в определении функции принимает в качестве значения строку (тип str
)-> str
обозначает тип возвращаемого функцией значенияtyping
. Почитать подробнее про аннотации типов можно в PEP 484 и PEP 526. Документация модуля
typing
доступна по ссылке.Ставьте реакцию:
😎 — если знали, что такое аннотации типов
👀 — если слышите о них впервые
#python #полезныйматериал #аннотациитипов #typehints
Please open Telegram to view this post
VIEW IN TELEGRAM
51😎103👀45👍7🔥7❤4 3✍1👏1🙏1🆒1 1
Друзья, сегодня поговорим о пяти способах обмена значений переменных в Python. 😄
1⃣ Третья переменная
Самый наивный способ поменять местами значения двух переменных — использовать третью переменную в качестве временного хранилища. Данный метод подходит для работы с любыми типами данных. Основной недостаток способа заключается в том, что для него требуется вспомогательная переменная, для которой выделяется дополнительная память.
2⃣ Позиционное присваивание
В Python осуществить обмен значений переменных можно с помощью позиционного присваивания, которое является синтаксическим сахаром и позволяет избежать явного создания третьей переменной. Данный способ также подходит для любых типов данных.
3⃣ Операторы
Произвести обмен числовых значений переменных можно с помощью операций сложения и вычитания. Для этого нужно найти сумму значений и записать ее в одну из переменных. После этого переменным присваиваются новые значения, полученные путем последовательного вычитания из найденной суммы исходного и нового значения второй переменной.
4⃣ Операторы
Следующий способ обмена числовых значений переменных (кроме
5⃣ Побитовый оператор
Для обмена целочисленных значений переменных можно использовать побитовый оператор
Ставьте реакцию:
🔥 — если знали все 5 способов
👀 — если слышите о некоторых впервые
🔝 🔝 🔝 Сохраняйте пост в избранное, точно пригодится! ✍🏻
#python #полезныйматериал
Самый наивный способ поменять местами значения двух переменных — использовать третью переменную в качестве временного хранилища. Данный метод подходит для работы с любыми типами данных. Основной недостаток способа заключается в том, что для него требуется вспомогательная переменная, для которой выделяется дополнительная память.
В Python осуществить обмен значений переменных можно с помощью позиционного присваивания, которое является синтаксическим сахаром и позволяет избежать явного создания третьей переменной. Данный способ также подходит для любых типов данных.
+
и -
Произвести обмен числовых значений переменных можно с помощью операций сложения и вычитания. Для этого нужно найти сумму значений и записать ее в одну из переменных. После этого переменным присваиваются новые значения, полученные путем последовательного вычитания из найденной суммы исходного и нового значения второй переменной.
*
и /
Следующий способ обмена числовых значений переменных (кроме
0
) заключается в нахождении произведения значений, которое записывается в одну из переменных. После этого переменным присваиваются новые значения, полученные путем последовательного деления найденного произведения на исходное и новое значение второй переменной. При этом важно помнить, что оператор деления /
всегда возвращает вещественное число.^
Для обмена целочисленных значений переменных можно использовать побитовый оператор
^
(побитовое исключающее ИЛИ). Он оперирует битами чисел, сравнивая их двоичные представления и переворачивая отличающиеся биты в соответствии со своей таблицей истинности. Данный способ является эффективным, однако он может быть не совсем очевидным и сложным для чтения. Ставьте реакцию:
🔥 — если знали все 5 способов
👀 — если слышите о некоторых впервые
#python #полезныйматериал
Please open Telegram to view this post
VIEW IN TELEGRAM
👀159👍21🔥17🏆2 2✍1🎉1🤝1🆒1😎1 1
Друзья, сегодня поговорим о типах ошибок, с которыми сталкиваются программисты при написании программ. 😳
❤️ При разработке программ на любом языке программирования практически всегда возникают различные ошибки. В Python выделяют следующие их типы:
➖ Синтаксические ошибки возникают из-за несоблюдения общепринятого синтаксиса языка.
В приведенном ниже коде:
пропущено двоеточие в определении функции. При попытке запуска данного кода мы получим синтаксическую ошибку:
➖ Логические ошибки выявлять сложнее, поскольку их не отлавливает интерпретатор. Обычно они вызваны недостатком в логике программы, из-за чего результат ее работы отличается от желаемого.
В приведенном ниже коде:
описана функция
Возможным решением проблемы является тестирование программы на разных примерах входных данных, для которых известен правильный результат.
➖ Ошибки времени выполнения (исключения) возникают в процессе выполнения программы и связаны с некорректными действиями пользователя или системы.
Приведенный ниже код:
выводит:
Деление на ноль приводит к аварийному завершению работы программы и выводу ошибки.
Ставьте реакцию:
😎 — если редко допускаете ошибки
🫡 — если ошибки — наше всё!😄
❤️ Делитесь в комментариях, с каким типом ошибок при написании программ вы сталкиваетесь чаще всего?
#python #полезныйматериал
В приведенном ниже коде:
def square(num)
return num ** 2
пропущено двоеточие в определении функции. При попытке запуска данного кода мы получим синтаксическую ошибку:
SyntaxError: expected ':'
В приведенном ниже коде:
def avg(a, b):
return a + b / 2
print(avg(6, 14)) # 13.0 - неверный результат
описана функция
avg()
, возвращающая среднее значение переданных в нее аргументов. В теле функции допущена логическая ошибка — пропущены скобки, на два необходимо делить сумму чисел a
и b
.Возможным решением проблемы является тестирование программы на разных примерах входных данных, для которых известен правильный результат.
Приведенный ниже код:
num1 = 10
num2 = 0
print(num1 / num2)
выводит:
ZeroDivisionError: division by zero
Деление на ноль приводит к аварийному завершению работы программы и выводу ошибки.
ZeroDivisionError
— это название исключения, а division by zero
— его краткое описание.Ставьте реакцию:
😎 — если редко допускаете ошибки
🫡 — если ошибки — наше всё!
#python #полезныйматериал
Please open Telegram to view this post
VIEW IN TELEGRAM
5🫡215😎15 13👍9🔥5✍2👏1🤩1👨💻1🆒1 1
Друзья, а вы знали, что функция
📍 Функция
🔘
🔘
🔘
Приведенный ниже код:
выводит:
📍 На самом деле функция
🔘 Диапазоны похожи на последовательности в Python (строки, списки, кортежи). Они поддерживают:
🔘 итерацию по элементам
🔘 индексацию
🔘 срезы (возвращается новый объект типа
🔘 нахождение длины с помощью функции 🔘 операторы 🔘 методы 📎 Однако объект типа
🔥 Главное преимущество типа
Ставьте реакцию:
🔥 — если знали про тип данных
👀 — если слышите о нем впервые
🔝 🔝 🔝 Сохраняйте пост в избранное, точно пригодится! ✍🏻
#python #полезныйматериал #range
range()
возвращает особый объект типа range
? 👀range()
используется для генерации последовательности целых чисел с заданным шагом. Она может принимать три аргумента:start
— начало последовательности (включительно)stop
— конец последовательности (не включительно)step
— шаг последовательностиПриведенный ниже код:
print(*range(10))
print(*range(1, 10))
print(*range(2, 10, 2))
выводит:
0 1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
2 4 6 8
range()
является классом, который представляет собой отдельный неизменяемый тип данных. Объекты данного класса называют диапазонами.range
)len()
==
, !=
и in
index()
и count()
range
не поддерживает конкатенацию и умножение на число, поскольку диапазоны являются последовательностями, которые следуют строгому шаблону арифметической прогрессии, а повторение и конкатенация могут нарушить этот шаблон.range
над строками, списками и кортежами заключается в том, что объект типа range
всегда занимает небольшое фиксированное количество памяти, независимо от размера представляемого им диапазона чисел. Он хранит в памяти только значения start
, stop
и step
, а элементы диапазона вычисляются по мере необходимости.Ставьте реакцию:
🔥 — если знали про тип данных
range
👀 — если слышите о нем впервые
#python #полезныйматериал #range
Please open Telegram to view this post
VIEW IN TELEGRAM
55🔥184👀68👍22✍5 5👏2🆒2❤1🤔1🤩1😈1
Друзья, сегодня поговорим об операторе 😄
📍 В Python существуют конструкции, операторы которых требуют обязательной реализации блока кода. К таким конструкциям относятся:
⭐ условные операторы —
⭐ циклы —
⭐ функции —
⭐ классы —
⭐ контекстные менеджеры —
⭐ операторы обработки исключений —
Если в программе определить любую из этих конструкций с пустым блоком кода, то будет возбуждено исключение
Например, приведенный ниже код:
выводит
📍 Иногда может возникнуть ситуация, когда необходимо определить конструкцию с обязательным блоком кода, но мы хотим реализовать его позже или просто оставить пустым.
📍 В таких случаях можно заменить блок кода конструкции оператором
Приведенный ниже код:
завершается без ошибок.
📍 Помимо оператора
Приведенный ниже код:
также завершается без ошибок.
📌 Почитать подробнее про константу 😉
Ставьте реакцию:
🔥 — если знали про оператор
👀 — если узнали о нем впервые
🔝 🔝 🔝 Сохраняйте пост в избранное, точно пригодится! ✍🏻
#python #полезныйматериал #pass #Ellipsis
pass
в Python. if/elif/else
for
и while
def
class
with
try/except/finally
Если в программе определить любую из этих конструкций с пустым блоком кода, то будет возбуждено исключение
IndentationError
.Например, приведенный ниже код:
def func():
# пустой блок кода
выводит
IndentationError: expected an indented block after function definition
.pass
, который используется в качестве заглушки и не выполняет никаких действий. Это позволит нам сохранить синтаксическую корректность кода.Приведенный ниже код:
def func():
pass
завершается без ошибок.
pass
в качестве заглушки можно использовать встроенную в Python константу Ellipsis
или соответствующий ей литерал ...
.Приведенный ниже код:
def func():
...
также завершается без ошибок.
Ellipsis
можно в нашей статье по ссылке. Ставьте реакцию:
🔥 — если знали про оператор
pass
👀 — если узнали о нем впервые
#python #полезныйматериал #pass #Ellipsis
Please open Telegram to view this post
VIEW IN TELEGRAM
24🔥188👀46👍10 7❤5✍2👏2🌚1👨💻1🆒1
Друзья, сегодня разберем интересный вариант использования встроенной в Python функции
🟪 Функция
🟪 Файловый дескриптор — это целое неотрицательное число, которое является уникальным идентификатором файла и используется операционной системой для управления файлами и другими объектами ввода-вывода.
Первые три файловых дескриптора (
▫ стандартный ввод
▫ стандартный вывод
▫ стандартный вывод ошибок
✔ Использование функции
Например, для чтения данных из стандартного ввода вместо импорта объекта
Почитать подробнее про функцию
Ставьте реакцию:
🔥 — если знали, что такое файловые дескрипторы
👀 — если узнали о них впервые
🔝 🔝 🔝 Сохраняйте пост в избранное, точно пригодится! ✍🏻
#python #полезныйматериал
open()
. open()
используется для открытия файлов. Она возвращает специальный файловый объект, который имеет различные методы для работы с открытым файлом. В качестве обязательного аргумента функция open()
принимает путь к файлу или файловый дескриптор.Первые три файловых дескриптора (
0
, 1
и 2
) зарезервированы под стандартные потоки ввода-вывода: STDIN
— 0
STDOUT
— 1
STDERR
— 2
open()
с данными файловыми дескрипторами является альтернативой работы с объектами stdin
(поток ввода), stdout
(поток вывода) и stderr
(поток вывода ошибок) встроенного модуля sys
.Например, для чтения данных из стандартного ввода вместо импорта объекта
sys.stdin
можно воспользоваться функцией open()
, передав ей в качестве аргумента дескриптор 0
, как показано на картинке. Почитать подробнее про функцию
open()
можно по ссылке, про объекты стандартных потоков ввода-вывода из модуля sys
— по ссылке, про файловые дескрипторы — по ссылке.Ставьте реакцию:
🔥 — если знали, что такое файловые дескрипторы
👀 — если узнали о них впервые
#python #полезныйматериал
Please open Telegram to view this post
VIEW IN TELEGRAM
👀110🔥59👍26❤3✍2🤩1👨💻1🆒1
Друзья, сегодня поговорим о перечислениях в Python. 😉
📌 Перечисление — это набор символических имен, привязанных к уникальным постоянным значениям. Они могут быть полезны, когда нужно определить неизменяемый набор связанных по смыслу констант. В качестве примеров перечислений можно привести дни недели или времена года.
📌 В Python для создания перечислений используется класс
Например, приведенный ниже код:
определяет перечисление
😌 Поскольку перечисления используются для представления констант, имена элементов перечисления рекомендуется записывать в верхнем регистре.
✔️ Основной операцией при работе с перечислениями является доступ к их элементам, которые представляют собой экземпляры класса перечисления. Они имеют атрибуты
✔️ Перечисления являются итерируемыми объектами, поэтому их можно перебирать в цикле и преобразовывать в различные коллекции. Также перечисления поддерживают операции сравнивания, благодаря чему их можно использовать в условных конструкциях, делая их более наглядными.
🔥 При разработке программ мы можем обойтись без перечислений, однако они часто упрощают процесс написания кода и улучшают его читаемость. 😎
Почитать подробнее про перечисления в Python можно в документации.
Ставьте реакцию:
🔥 — если знали о перечислениях
👀 — если узнали о них впервые
🔝 🔝 🔝 Сохраняйте пост в избранное, точно пригодится! ✍🏻
#python #полезныйматериал #enum
Enum
из встроенного модуля enum
. Чтобы создать собственное перечисление, необходимо создать подкласс Enum
.Например, приведенный ниже код:
from enum import Enum
class Weekday(Enum):
MONDAY = 1
TUESDAY = 2
WEDNESDAY = 3
THURSDAY = 4
FRIDAY = 5
SATURDAY = 6
SUNDAY = 7
определяет перечисление
Weekday
, содержащее элементы MONDAY
со значением 1
, TUESDAY
со значением 2
и другие.name
и value
, в которых содержатся их имена и значения:from enum import Enum
class Weekday(Enum):
MONDAY = 1
TUESDAY = 2
WEDNESDAY = 3
THURSDAY = 4
FRIDAY = 5
SATURDAY = 6
SUNDAY = 7
print(Weekday.MONDAY.name) # MONDAY
print(Weekday.MONDAY.value) # 1
Почитать подробнее про перечисления в Python можно в документации.
Ставьте реакцию:
🔥 — если знали о перечислениях
👀 — если узнали о них впервые
#python #полезныйматериал #enum
Please open Telegram to view this post
VIEW IN TELEGRAM
1👀113🔥57⚡4 3❤2👏2✍1🥰1😁1💋1🆒1
Друзья, в одном из предыдущих постов мы говорили о кодах состояния HTTP. Сегодня рассмотрим наиболее популярные клиентские и серверные ошибки. 😨
❤️ Клиентские ошибки представлены кодами состояния
⭐
Означает неверный запрос и может возникнуть, например, если запрос не соответствует определенному формату или в нем допущена синтаксическая ошибка.
⭐
Возникает, когда для доступа к ресурсу необходимо быть авторизованным пользователем. Причиной ошибки может быть, например, неверно указанный логин или пароль пользователя при входе в свой аккаунт.
⭐
Означает, что доступ к запрашиваемому ресурсу запрещен. Эта ошибка возникает, когда клиент пытается получить доступ к контенту, но у него нет на это необходимых прав.
⭐
Пожалуй, самая знаменитая ошибка в Интернете. Она означает, что сервер не может найти запрошенный ресурс. Наиболее частой причиной возникновения этой ошибки является указание неверного адреса веб-страницы.
❤️ Серверные ошибки представлены кодами состояния
⭐
Означает, что на сервере произошла ошибка, в результате которой он не может успешно обработать запрос. Причиной ошибки может быть избыточная нагрузка на сервер, сбой в работе серверного ПО, программная ошибка или проблема с базой данных.
⭐
Возникает, когда сервер не готов обработать запрос в данный момент. Распространенными причинами ошибки являются техническое обслуживание или перегрузка сервера.
Ставьте реакцию:
🙈 — если сталкивались с серверными ошибками на Stepik
😎 — если ни разу не встречали их на Stepik
🔝 🔝 🔝 Сохраняйте пост в избранное, точно пригодится! ✍🏻
#python #полезныйматериал #http #кодсостояния
4**
:400 Bad Request
Означает неверный запрос и может возникнуть, например, если запрос не соответствует определенному формату или в нем допущена синтаксическая ошибка.
401 Unauthorized
Возникает, когда для доступа к ресурсу необходимо быть авторизованным пользователем. Причиной ошибки может быть, например, неверно указанный логин или пароль пользователя при входе в свой аккаунт.
403 Forbidden
Означает, что доступ к запрашиваемому ресурсу запрещен. Эта ошибка возникает, когда клиент пытается получить доступ к контенту, но у него нет на это необходимых прав.
404 Not Found
Пожалуй, самая знаменитая ошибка в Интернете. Она означает, что сервер не может найти запрошенный ресурс. Наиболее частой причиной возникновения этой ошибки является указание неверного адреса веб-страницы.
5**
:500 Internal Server Error
Означает, что на сервере произошла ошибка, в результате которой он не может успешно обработать запрос. Причиной ошибки может быть избыточная нагрузка на сервер, сбой в работе серверного ПО, программная ошибка или проблема с базой данных.
503 Service Unavailable
Возникает, когда сервер не готов обработать запрос в данный момент. Распространенными причинами ошибки являются техническое обслуживание или перегрузка сервера.
Ставьте реакцию:
🙈 — если сталкивались с серверными ошибками на Stepik
😎 — если ни разу не встречали их на Stepik
#python #полезныйматериал #http #кодсостояния
Please open Telegram to view this post
VIEW IN TELEGRAM
10🙈81😎58🔥14👍8✍2❤2 2🥰1🤩1👨💻1🆒1
Друзья, сегодня поговорим о паттернах проектирования.
В процессе создания программ большинство разработчиков сталкиваются с задачами, связанными с проектированием кода. Многие из таких архитектурных задач встречаются достаточно часто. Придумывать каждый раз новое решение неэффективно, поэтому были разработаны различные паттерны проектирования.
🟪 Паттерны проектирования — это шаблоны решений типовых задач проектирования программ.
Чаще всего паттерны проектирования используются для программ, написанных на объектно-ориентированных языках. Типовые задачи проектирования таких программ можно разделить на три основные категории:
▫ создание новых объектов
▫ структурирование системы на основе классов и объектов
▫ построение связей между объектами и распределение обязанностей между ними
Паттерны проектирования также подразделяются на категории в соответствии с задачами, которые они решают:
1⃣ Порождающие — предназначены для создания объектов, позволяют системе оставаться независимой как от самого процесса создания, так и от типов создаваемых объектов
2⃣ Структурные — рассматривают вопросы грамотной компоновки частей системы
3⃣ Поведенческие — решают проблемы взаимосвязи различных частей системы
✔ Паттерны помогают быстрее и эффективнее создавать код, не изобретая велосипед. Кроме того, использование паттернов улучшает читаемость кода. Другой программист, знакомый с нужным паттерном, сможет увидеть его в коде и понять, как все реализовано.
📎 Однако важно понимать, что паттерн — это лишь образец. Он дает не конкретное решение проблемы, а путь к решению. Причем выбор правильного паттерна является нетривиальной задачей, предполагающей у программиста наличие интуиции, опыта и творческого мышления.
Ставьте реакцию:
❤️ — если знали о паттернах проектирования
👀 — если слышите о них впервые
🔝 🔝 🔝 Сохраняйте пост в избранное, точно пригодится! ✍🏻
#python #полезныйматериал #паттерныпроектирования
В процессе создания программ большинство разработчиков сталкиваются с задачами, связанными с проектированием кода. Многие из таких архитектурных задач встречаются достаточно часто. Придумывать каждый раз новое решение неэффективно, поэтому были разработаны различные паттерны проектирования.
Чаще всего паттерны проектирования используются для программ, написанных на объектно-ориентированных языках. Типовые задачи проектирования таких программ можно разделить на три основные категории:
Паттерны проектирования также подразделяются на категории в соответствии с задачами, которые они решают:
Ставьте реакцию:
❤️ — если знали о паттернах проектирования
👀 — если слышите о них впервые
#python #полезныйматериал #паттерныпроектирования
Please open Telegram to view this post
VIEW IN TELEGRAM
👀81❤57🔥7 5👍1🥰1🤩1👨💻1🆒1😎1 1
Друзья, сегодня поговорим о том, почему в Python результат выражения 😨
📎 Дело в том, что большинство десятичных дробей невозможно представить в понятном компьютеру двоичном виде с необходимой точностью.
Например, десятичная дробь
📍 В результате при работе с числами с плавающей точкой в Python и других языках программирования возникают ошибки округления.
Приведенный ниже код:
выводит
📎 Сравнивать числа с плавающей точкой с помощью оператора
Распространенным способом проверить, почти ли равны два числа с плавающей точкой, является функция
Приведенный ниже код:
выводит
😉 Всегда будьте осторожны при работе с числами с плавающей точкой в любом языке программирования. Используйте инструменты, учитывающие ошибки округления.
Ставьте реакцию:
🔥 — если знали эту особенность чисел с плавающей точкой
👀 — если слышите о ней впервые
🔝 🔝 🔝 Сохраняйте пост в избранное, точно пригодится! ✍🏻
#python #полезныйматериал
0.1 + 0.1 + 0.1
не равен 0.3
. Например, десятичная дробь
0.1
не имеет точного двоичного представления. При преобразовании числа 0.1
в двоичную систему счисления мы получаем бесконечную дробь: 0.00011001100110011...
Приведенный ниже код:
print(0.1 + 0.1 + 0.1 == 0.3)
выводит
False
.==
не рекомендуется. Вместо этого лучше использовать приближение и проверять, являются ли числа с плавающей точкой "почти равными".Распространенным способом проверить, почти ли равны два числа с плавающей точкой, является функция
isclose()
встроенного модуля math
. Приведенный ниже код:
from math import isclose
print(isclose(0.1 + 0.1 + 0.1, 0.3))
выводит
True
.Ставьте реакцию:
🔥 — если знали эту особенность чисел с плавающей точкой
👀 — если слышите о ней впервые
#python #полезныйматериал
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥180👀127👍16✍4 4❤2❤🔥2🆒2 2😱1🏆1
Друзья, сегодня поговорим о формате данных JSON и встроенном в Python модуле 😝
🗂 JSON (англ. JavaScript Object Notation) — текстовый формат обмена данными, основанный на языке программирования JavaScript. Он легко читается людьми и может использоваться практически с любым языком программирования.
📎 Данные в формате JSON чаще всего имеют структуру ключ-значение. Это напоминает словарь в Python, однако JSON в качестве ключей может содержать только строки. В качестве значений в JSON могут быть использованы:
🟣 строка
🟣 число (целое или вещественное)
🟣 литералы
🟣 список (заключается в квадратные скобки
🟣 вложенный объект (неупорядоченное множество пар ключ-значение, заключенное в фигурные скобки
😌 Важно: JSON поддерживает строки только в двойных кавычках.
⬆️ На картинке представлен пример JSON-представления данных об объекте, описывающем человека.
🗂 Преобразование Python-объектов в формат для хранения называется сериализацией, а обратное преобразование — десериализацией.
Python для сериализации и десериализации в формат JSON предоставляет встроенный модуль
▫️
▫️
▫️
▫️
Почитать подробнее о формате данных JSON можно по ссылке, о модуле
Ставьте реакцию:
🔥 — если знали о формате данных JSON
👀 — если узнали о нем впервые
🔝 🔝 🔝 Сохраняйте пост в избранное, точно пригодится! ✍🏻
#python #полезныйматериал #json
json
. true
, false
и null
(отсутствие значения)[]
){}
)Python для сериализации и десериализации в формат JSON предоставляет встроенный модуль
json
, который содержит следующие функции:dumps()
— для сериализации объектов в json
-строкуdump()
— для сериализации объектов в файл .json
loads()
— для десериализации json
-строки в объектload()
— для десериализации объектов из файла .json
Почитать подробнее о формате данных JSON можно по ссылке, о модуле
json
— по ссылке.Ставьте реакцию:
🔥 — если знали о формате данных JSON
👀 — если узнали о нем впервые
#python #полезныйматериал #json
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥174👀50❤10👍9 6✍3💯1😇1💘1👾1
Друзья, сегодня поговорим о типе
📌 В Python 3 строки представлены последовательностью символов. Каждый символ имеет байтовое представление — последовательность байтов, которая определяется кодировкой — алгоритмом преобразования идентификаторов символов Unicode в последовательности байтов и наоборот.
Каждый байт последовательности представляет собой число от 0 до 255, которое записывается двумя шестнадцатеричными цифрами с префиксом
✅ В Python для работы с последовательностями байтов используется тип
Приведенный ниже код:
выводит:
✅ Для создания байтовых строк из обычных (тип
Приведенный ниже код:
выводит:
😉 Объектам типа
Приведенный ниже код:
выводит:
📌 Тип
Ставьте реакцию:
🔥 — если знали о типе
👀 — если узнали о нем впервые
🔝 🔝 🔝 Сохраняйте пост в избранное, точно пригодится! ✍🏻
#python #полезныйматериал
bytes
в Python.Каждый байт последовательности представляет собой число от 0 до 255, которое записывается двумя шестнадцатеричными цифрами с префиксом
\x
. Например, строка Beegeek
в байтовом представлении имеет следующий вид:b'\x42\x65\x65\x67\x65\x65\x6b'
bytes
, который представляет собой неизменяемую последовательность байтов в виде байтовой строки. Перед байтовой строкой указывается префикс b
.Приведенный ниже код:
s = b'\x42\x65\x65\x67\x65\x65\x6b'
print(s)
print(type(s))
выводит:
b'Beegeek'
<class 'bytes'>
str
) можно воспользоваться строковым методом encode()
или явно создать экземпляр класса bytes
, конструктор которого принимает в качестве аргументов произвольную строку и кодировку.Приведенный ниже код:
s = 'Beegeek'
print(s.encode())
print(bytes(s, 'utf-8'))
выводит:
b'Beegeek'
b'Beegeek'
bytes
доступны практически все те же методы, что и объектам типа str
.Приведенный ниже код:
s = 'Beegeek'.encode()
print(s.upper())
print(s.count(b'e'))
выводит:
b'BEEGEEK'
4
bytes
используется для работы с бинарными файлами, сетевыми протоколами и в различных низкоуровневых операциях. Почитать о нем подробнее можно по ссылке.Ставьте реакцию:
🔥 — если знали о типе
bytes
👀 — если узнали о нем впервые
#python #полезныйматериал
Please open Telegram to view this post
VIEW IN TELEGRAM
👀103🔥53 12👍8❤3✍2🤩2🍾1💋1
Друзья, ранее мы рассмотрели тип 😎
📎 Объекты типа
Приведенный ниже код:
выводит:
📎 Объектам типа
Приведенный ниже код:
выводит:
😉 Работа с объектами типа
Почитать подробнее о типе
Ставьте реакцию:
🔥 — если знали о типе
👀 — если узнали о нем впервые
🔝 🔝 🔝 Сохраняйте пост в избранное, точно пригодится! ✍🏻
#python #полезныйматериал
bytes
, представляющий байтовые строки в Python. Сегодня поговорим об изменяемом аналоге байтовых строк — типе bytearray
. bytearray
представляют собой байтовые массивы. Процесс их создания довольно прост: необходимо создать экземпляр класса bytearray
, конструктор которого принимает в качестве аргументов произвольную строку и кодировку.Приведенный ниже код:
s = 'Beegeek'
byte_array = bytearray(s, encoding='utf-8')
print(byte_array)
print(type(byte_array))
выводит:
bytearray(b'Beegeek')
<class 'bytearray'>
bytearray
, как и объектам типа bytes
, доступны почти все методы обычных строк (тип str
). Однако байтовые массивы, будучи изменяемыми, поддерживают и списочные методы (тип list
).Приведенный ниже код:
s = 'Beegeek'
byte_array = bytearray(s, encoding='utf-8')
byte_array = byte_array.upper()
print(byte_array)
byte_array.extend(b'beegeek')
print(byte_array)
выводит:
bytearray(b'BEEGEEK')
bytearray(b'BEEGEEKbeegeek')
bytes
и bytearray
может быть выгодной с точки зрения памяти. Графическое представление символов в обычной строке часто занимает гораздо больше памяти, чем их байтовое представление.Почитать подробнее о типе
bytearray
можно по ссылке.Ставьте реакцию:
🔥 — если знали о типе
bytearray
👀 — если узнали о нем впервые
#python #полезныйматериал
Please open Telegram to view this post
VIEW IN TELEGRAM
👀70🔥19👍9 3❤2🥰2⚡1
Друзья, сегодня поговорим о строковых константах встроенного в Python модуля 😌
🟪 Нередко встречается ситуация, когда для решения задачи нам требуется определенный набор строковых символов. Например, когда необходимо проверить символы строки на принадлежность к цифрам, буквам английского алфавита или знакам препинания. Решить такую задачу можно с помощью:
🟣 строковых методов
🟣 таблицы символов 🟣 регулярных выражений (встроенный модуль
✔ Еще один способ решения подобных задач заключается в использовании строковых констант модуля
Приведенный ниже код:
выводит:
😉 Помимо приведенных строковых констант, модуль
Ставьте реакцию:
🔥 — если знали о строковых константах модуля
👀 — если узнали о них впервые
🔝 🔝 🔝 Сохраняйте пост в избранное, точно пригодится! ✍🏻
#python #полезныйматериал #string
string
. isdigit()
, isalpha()
и другихUnicode
и функции ord()
re
)string
, которые представляют собой готовые наборы различных символов. Рассмотрим некоторые из них.Приведенный ниже код:
import string
print(string.digits)
print(string.ascii_letters)
print(string.ascii_lowercase)
print(string.ascii_uppercase)
print(string.punctuation)
выводит:
0123456789
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ
!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
string
содержит и другие строковые константы, а также несколько полезных инструментов для работы со строками. Почитать подробно про возможности этого модуля можно в документации по ссылке.Ставьте реакцию:
🔥 — если знали о строковых константах модуля
string
👀 — если узнали о них впервые
#python #полезныйматериал #string
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥99👀82👍12 2❤1🎉1 1
Друзья, сегодня поговорим о том, что означает ошибка
Данная ошибка возникает при попытке проитерировать объект, который не является итерируемым.
😳 Где же мы ошиблись в нашей программе?
Дело в том, что мы пытаемся перебрать в цикле
Целые числа (тип
😌 Для того чтобы исправить ошибку в нашем коде, необходимо использовать функцию
Приведенный ниже код:
выводит
Ставьте реакцию:
😎 — если сразу нашли ошибку
👀 — если ошибку отыскать не удалось
#python #полезныйматериал #чтоозначаетошибка
TypeError: <type> object is not iterable
.Данная ошибка возникает при попытке проитерировать объект, который не является итерируемым.
Дело в том, что мы пытаемся перебрать в цикле
for
длину списка numbers
— целое число, полученное в результате вызова функции len()
:for i in len(numbers):
Целые числа (тип
int
) не являются итерируемыми объектами, поэтому при выполнении программы возникает ошибка TypeError: 'int' object is not iterable
.range()
, которая возвращает итерируемый объект типа range
.Приведенный ниже код:
numbers = [4, 1, 5, 3, 2]
total = 0
for i in range(len(numbers)):
number = numbers[i]
if number % 2:
total += number
print(total)
выводит
9
.Ставьте реакцию:
😎 — если сразу нашли ошибку
👀 — если ошибку отыскать не удалось
#python #полезныйматериал #чтоозначаетошибка
Please open Telegram to view this post
VIEW IN TELEGRAM
😎109👀86👍16🔥3❤2👏2😁2🤩1
Друзья, в октябре этого года выходит версия Python π 3.14. Хотим рассказать о том, что в ней нового! 😎
✅ Python стал еще быстрее. Обновившись до новой версии, можно увеличить прирост производительности своих программ до 30%.
✅ Новые сообщения об ошибках. Если раньше приходилось помнить о том, что значит та или иная ошибка, то теперь этого делать не нужно, так как ошибки стали содержать более детальную информацию.
Приведенный ниже код:
в Python 3.13 приводит к возбуждению исключения:
в Python 3.14 приводит к возбуждению исключения:
✅ Аннотации больше не вычисляются немедленно. Это происходит по мере необходимости с помощью специальных функций. Такое изменение призвано сделать работу с аннотациями более быстрой и удобной.
✅ Добавлена поддержка ZStandard. Это способ быстрого сжатия данных, который лучше и производительнее, чем обычный zip.
✅ При обработке нескольких типов исключений в одном блоке
Приведенный ниже код:
в Python 3.13 приводит к возбуждению исключения:
в то время как в Python 3.14 выводит:
✅ При использовании в блоке
✅ Появится новый вид строк — t-строки. В отличие от f-строк, которые сразу подставляют значения в соответствующие заполнители, t-строки хранят их отдельно и позволяют изменять в процессе формирования строки. Этот вид строк создан с целью обеспечения большей безопасности, например, при формировании HTML-кода или SQL-запросов.
Было внесено и множество других изменений, как крупных, так и не очень:
🟢 в новой версии модули
🟢 появился параметр
🟢 был улучшен экспериментальный режим без GIL
🟢 значительно обновлен Python C API
Ознакомиться со всеми изменениями Python 3.14 можно в документации по ссылке.
Ставьте реакцию:
🔥 — если любите накатывать обновления сразу после выхода
👀 — если ждете, пока выловят все ошибки
#поколениеpython #python #python314
✅ Python стал еще быстрее. Обновившись до новой версии, можно увеличить прирост производительности своих программ до 30%.
✅ Новые сообщения об ошибках. Если раньше приходилось помнить о том, что значит та или иная ошибка, то теперь этого делать не нужно, так как ошибки стали содержать более детальную информацию.
Приведенный ниже код:
s = set()
seq = [1, 2, 3]
s.add(seq)
в Python 3.13 приводит к возбуждению исключения:
TypeError: unhashable type: 'list'
в Python 3.14 приводит к возбуждению исключения:
TypeError: cannot use 'list' as a set element (unhashable type: 'list')
✅ Аннотации больше не вычисляются немедленно. Это происходит по мере необходимости с помощью специальных функций. Такое изменение призвано сделать работу с аннотациями более быстрой и удобной.
✅ Добавлена поддержка ZStandard. Это способ быстрого сжатия данных, который лучше и производительнее, чем обычный zip.
✅ При обработке нескольких типов исключений в одном блоке
except
убрали необходимость заключать исключения в скобки.Приведенный ниже код:
try:
raise ValueError
except TypeError, ValueError:
print(‘Исключение обработано’)
в Python 3.13 приводит к возбуждению исключения:
SyntaxError: multiple exception types must be parenthesized
в то время как в Python 3.14 выводит:
Исключение обработано
✅ При использовании в блоке
finally
одного из операторов return, break
или continue
теперь всплывает предупреждение SyntaxWarning
.✅ Появится новый вид строк — t-строки. В отличие от f-строк, которые сразу подставляют значения в соответствующие заполнители, t-строки хранят их отдельно и позволяют изменять в процессе формирования строки. Этот вид строк создан с целью обеспечения большей безопасности, например, при формировании HTML-кода или SQL-запросов.
Было внесено и множество других изменений, как крупных, так и не очень:
unittest
и calendar
научились выводить цветной текстstrict
у функции map()
, который может запретить обрабатывать коллекции разного размераОзнакомиться со всеми изменениями Python 3.14 можно в документации по ссылке.
Ставьте реакцию:
🔥 — если любите накатывать обновления сразу после выхода
👀 — если ждете, пока выловят все ошибки
#поколениеpython #python #python314
Please open Telegram to view this post
VIEW IN TELEGRAM
15🔥133👀89❤16 9👍5 5✍3
Друзья, давайте обсудим, что означает ошибка 😎
Эта ошибка возникает, когда мы пытаемся обратиться к элементу списка по несуществующему индексу.
❓ Где же ошибка в нашей программе?
Мы одновременно итерируем список в цикле
Цикл находит длину списка один раз перед первой итерацией и запоминает ее. Во время работы цикла мы удаляем элементы списка, и его фактическая длина уменьшается. Однако цикл отрабатывает количество итераций, равное исходной длине списка. Это приводит к тому, что на одной из итераций мы обращаемся к списку по индексу, значение которого больше текущей длины. В результате возникает ошибка
‼️ ‼️ ‼️ ❗️ Не изменяйте список во время итераций по нему: это антипаттерн, который может привести к непредсказуемому поведению программы и ошибкам.
Проблему в нашем коде можно решить, например, с помощью списочного выражения с условием, которое позволит на этапе создания списка добавить в него лишь те элементы, которые не подлежат удалению (в нашем примере — нечетные числа).
Приведенный ниже код:
выводит
Ставьте реакцию:
😎 — если сразу нашли ошибку в коде
👀 — если ошибку отыскать не удалось
#python #полезныйматериал #чтоозначаетошибка
IndexError: list index out of range
. Эта ошибка возникает, когда мы пытаемся обратиться к элементу списка по несуществующему индексу.
Мы одновременно итерируем список в цикле
for
и изменяем его содержимое. Цикл находит длину списка один раз перед первой итерацией и запоминает ее. Во время работы цикла мы удаляем элементы списка, и его фактическая длина уменьшается. Однако цикл отрабатывает количество итераций, равное исходной длине списка. Это приводит к тому, что на одной из итераций мы обращаемся к списку по индексу, значение которого больше текущей длины. В результате возникает ошибка
IndexError: list index out of range
.Проблему в нашем коде можно решить, например, с помощью списочного выражения с условием, которое позволит на этапе создания списка добавить в него лишь те элементы, которые не подлежат удалению (в нашем примере — нечетные числа).
Приведенный ниже код:
numbers = [num for num in range(9) if num % 2]
print(numbers)
выводит
[1, 3, 5, 7]
.Ставьте реакцию:
😎 — если сразу нашли ошибку в коде
👀 — если ошибку отыскать не удалось
#python #полезныйматериал #чтоозначаетошибка
Please open Telegram to view this post
VIEW IN TELEGRAM
1😎68🔥18👀18❤6👨💻5 4 3👍1🌚1💯1 1