Программа не работает. Что делать?

В данной лекции собраны наиболее частые ошибки начинающих программировать на python 3, а также инструкции как их исправлять.

Проблема: Моя программа не запускается. На доли секунды появляется чёрное окно, а затем исчезает.

Причина: после окончания выполнения программы (после выполнения всего кода или при возникновении исключения программа закрывается. И если вы её вызвали двойным кликом по иконке (а вы, скорее всего, вызвали её именно так), то она закроется вместе с окном, в котором находится вывод программы.

Решение: запускать программу через IDLE или через консоль.


Проблема: Не работает функция input. Пишет SyntaxError.

Пример кода:


>>> a = input()
hello world
   File "", line 1
      hello world
               ^
SyntaxError: unexpected EOF while parsing

Причина: Вы запустили Python 2.

Решение: Установить Python 3.


Проблема: Код найденной программы не работает.

Пример кода:


name = raw_input()
print name

Ошибка:


File "a.py", line 3
print name
         ^
SyntaxError: invalid syntax

Причина: Данная программа написана на Python 2.

Решение: Прочитать об отличиях Python 2 от Python 3. Переписать её на Python 3. Например, данная программа на Python 3 будет выглядеть так:


name = input()
print(name)


Проблема: TypeError: Can't convert 'int' object to str implicitly.

Пример кода:


>>> a = input() + 5
8
Traceback (most recent call last):
   File "", line 1, in 
TypeError: Can't convert 'int' object to str implicitly

Причина: Нельзя складывать строку с числом.

Решение: Привести строку к числу с помощью функции int(). Стоит заметить, что функция input() всегда возвращает строку!


>>> a = int(input()) + 5
8
>>> a
13


Проблема: SyntaxError: invalid syntax.

Пример кода:


a = 5
if a == 5
      print('Ура!')

Ошибка:


File "a.py", line 3
if a == 5
         ^
SyntaxError: invalid syntax

Причина: Забыто двоеточие.

Решение:


a = 5
if a == 5:
      print('Ура!')


Проблема: SyntaxError: invalid syntax.

Пример кода:


a = 5
if a = 5:
   print('Ура!')

Ошибка:


File "a.py", line 3
if a = 5
      ^
SyntaxError: invalid syntax

Причина: Забыто равно.

Решение:


a = 5
if a == 5:
      print('Ура!')


Проблема: NameError: name 'a' is not defined.

Пример кода:

print(a)

Причина: Переменная "a" не существует. Возможно, вы опечатались в названии или забыли инициализировать её.

Решение: Исправить опечатку.


a = 10
print(a)


Проблема: IndentationError: expected an indented block.

Пример кода:


a = 10
if a > 0:
print(a)

Причина: Нужен отступ.

Решение:


a = 10
if a > 0:
      print(a)


Проблема: TabError: inconsistent use of tabs and spaces in indentation.

Пример кода:


a = 10
if a > 0:
      print(a)
      print('Ура!')

Ошибка:


File "a.py", line 5
print('Ура!')
               ^
TabError: inconsistent use of tabs and spaces in indentation

Причина: Смешение пробелов и табуляции в отступах.

Решение: Исправить отступы.


a = 10
if a > 0:
      print(a)
      print('Ура!')


Проблема: UnboundLocalError: local variable 'a' referenced before assignment.

Пример кода:


def f():
   a += 1
   print(a)

a = 10
f()

Ошибка:


Traceback (most recent call last):
   File "a.py", line 7, in 
      f()
   File "a.py", line 3, in f
      a += 1
UnboundLocalError: local variable 'a' referenced before assignment

Причина: Попытка обратиться к локальной переменной, которая ещё не создана.

Решение:


def f():
   global a
   a += 1
   print(a)

a = 10
f()


Проблема: Программа выполнилась, но в файл ничего не записалось / записалось не всё.

Пример кода:


>>> f = open('output.txt', 'w', encoding='utf-8')
>>> f.write('bla')
3
>>>

Причина: Не закрыт файл, часть данных могла остаться в буфере.

Решение:


>>> f = open('output.txt', 'w', encoding='utf-8')
>>> f.write('bla')
3
>>> f.close()
>>>