7 ошибок в коде на Python, которые нужно исправить
Python — один из самых популярных языков программирования, который завоевал доверие разработчиков благодаря своей простоте, читабельности и мощным возможностям. Но, как и в любом другом языке, при работе с Python можно столкнуться с рядом распространенных ошибок, которые могут не только замедлить процесс разработки, но и привести к неожиданным результатам.
В этой статье мы рассмотрим частые ошибки, которые допускают как новички, так и опытные программисты, и разберем, как их избежать.
1. Не использовать итераторы
Почти все так или иначе совершали эту ошибку, вне зависимости от опыта в других языках программирования.
Типовая задача: пробежаться посписку в цикле for.
Стандартный подход - создать счетчик i и получить каждый элемент списка.
Правильный подход - вспомнить, что list - итерируемый объект.
Правильно:
for element in list_: foo(element)
Неправильно:
for i in range(len(list_)):
foo(list_[i])
2. Не использовать ELSE в цикле
Python позволяет использовать блок else в циклах for.
Если цикл for завершился без прерывания операторами break или return, то будет выполнен блок else.
Правильно:
l = [1, 2, 3]
num = 4
for n in l:
if n == num :
print("num found")
break
else:
print("num not found")
Неправильно:
l = [1, 2, 3]
num = 4
found = False
for n in l:
if n == num:
found = True
print("num found")
break
if not found:
print("num not found")
3. Неправильное использование IF-ELSE
Когда вы проверяете некоторое условие внутри функции, иногда нет необходимости писать блок if-else - порой достаточно использовать только if.
Правильно:
def func(a):
if a > 5:
return True
return False
Неправильно:
def func(a):
if a > 5:
return True
else:
return False
4. Возвращать разные типы данных в RETURN
Если вы возвращаете разные типы данных в блоке return в зависимости от ситуации, то это приводит к усложнению кода и ошибкам. Чтобы избежать таких ситуаций, при возникновении ошибки возбуждайте исключение.
Правильно:
def get_code(pswrd):
if pswrd != "bicycle":
raise ValueError
else:
return "42"
try:
code = get_code("car")
print(f"code is {code}")
except ValueError:
print("Wrong pswrd")
Неправильно:
def get_code(pswrd):
if pswrd != "bicycle":
return None
else:
return "42"
code = get_code("car")
if code is None:
print("Wrong pswrd")
else:
print(f"The code is {code}")
5. Неверное сравнение с TRUE
Самый лучший способ проверить, является ли переменная или выражение True> - использовать паттерн if cond: expr. Шаблоны if cond == True: expr и if cond is True: expr менее предпочтительны.
Правильно:
flag = True
if flag:
print("PEP 8 Style Guide prefers this pattern")
Неправильно:
flag = True
if flag == True:
print("This works, but is not the PEP 8 pattern")
6. Не использовать ZIP при итерировании списков
При итерировании нескольких списков возникает желание завести счетчик i с помощью range и получать элементы списков по индексу. Так делать не стоит - используйте функцию zip.
Правильно:
num = [1, 2, 3]
let = ["A", "B", "C"]
for n, l in zip(num, let):
print(n, l)
Неправильно:
num = [1, 2, 3]
let = ["A", "B", "C"]
for index in range(len(num)):
print(num[index], let[index])
7. Использовать KEY IN LIST
Если вы хотите проверить, встречается ли значение key в списке list, то не стоит всегда слепо использовать конструкцию key in list, т.к. это не всегда оптимально. Используйте множества - так вы пробежитесь не по всему списку, а только по уникальным элементам.
Правильно:
l = [1, 2, 3, 4, 1, 1, 2]
if 3 in set(l):
print("3 is in the list.")
else:
print("3 is NOT in the list.")
Неправильно:
l = [1, 2, 3, 4, 1, 1, 2]
if 3 in l:
print("3 is in the list.")
else:
print("3 is NOT in the list.")