Ошибки начинающих
@Pycoders
"Почему моя программа не работает? Я всё делал по гайду."
На днях мне поступило несколько подобных вопросов, я ответил, но сейчас постараюсь прояснить самые частые ошибки всех новичков и не только.
Если вы делаете всё, как показано где-либо, это уже ошибка. Надо делать не так, как где-то уже сделано, а необходимо сначала понять, как работает тот или иной алгоритм, а потом уже самому попытаться реализовать. Иначе вы просто не научитесь решать поставленные задачи, шаг влево, шаг вправо от изученного - и всё, вы в тупике.
Основной совет - изучайте принципы работы чего-либо, а не заучивайте уже написанный кем-то код.
Решение всех проблем - загуглить.
Разбор частых ошибок
SyntaxError, несовместимость python 2 и python 3.
Искать и пробовать новые функции - хорошая затея, если вы вникаете в их действие. Но не стоит забывать про то, что версии языка сильно различаются. Вы можете найти код на python 2 и пробовать запустить его на python 3, что вызовет ошибку. Первым делом лучше понять, под какую версию была написана программа, которую вы нашли.
Простой пример.
Python 2.
name = raw_input() print name
Python 3.
name = input() print(name)
Программа сразу же закрывается.
Такое может прозойти из-за исключения, либо из-за того, что программа закончила свое выполнение (это уже особенности вашего редактора). Настоятельно рекомендую запускать код через терминал или IDLE.
IndentationError: expected an indented block.
if 15 > 10:
print('Yes')
Необходимо сделать отступы в теле конструкции if. Допускается как табуляция, так и пробелы. Но следует ставить именно 4 пробела по правим оформления кода pep8.
TabError: inconsistent use of tabs and spaces in indentation.
Если у вас вылезла такая ошибка, то вы намешали табов и пробелов в своем коде. Исправить можно легко, поставив везде, где это требуется, только пробелы, либо только табуляцию.
TypeError: Can't convert 'int' object to str implicitly.
bar = input() print(bar + 10)
Переменная bar является строкой, а не числом. Складывать строки и числа нельзя. Не забывайте конвертировать данные в нужный тип.
bar = int(input()) print(bar + 10)
UnboundLocalError: local variable 'a' referenced before assignment.
def f():
a = 5
print(a)
a = 10
f()
В данном примере идет обращение к локальной перменной a, которой нет. Чтобы обратиться к глобальной, надо это обозначить.
def f():
global a
a = 5
print(a)
a = 10
f()
Здесь были приведены самые частые проблемы и ошибки, но далеко не все. Напоминаю, что почти абсолютно всё можно найти в интернете.
Буквально за минуту до публикации нашел вот такую познавательную картинку :)
