Featured image of post Py10. Исправление ошибок Python (FAQ)

Py10. Исправление ошибок Python (FAQ)

FAQ по распространенным ошибкам в Python

Черное окно терминала закрывается сразу после запуска .py файла

Причина: При двойном клике на .py файл терминал открывается, выполняет программу и закрывается. Если есть ошибка, вы её не увидите.

Решение: Запускайте файл через терминал, а не двойным кликом.

Как открыть терминал в папке с проектом:

  1. Найдите папку с файлом .py (например, main.py)
  2. Зажмите Shift и правой кнопкой мыши кликните в пустом месте папки
  3. Выберите “Открыть окно PowerShell здесь” или “Открыть окно команд”

Альтернатива:

  1. Откройте Пуск
  2. Введите cmd и запустите
  3. В терминале введите cd ПУТЬ_К_ПАПКЕ — например: cd C:\Users\Имя\Desktop\project

Как запустить файл:

1
python имя_файла.py

Если не работает python, попробуйте python3.

После запуска вы увидите ошибку или результат работы программы.

ModuleNotFoundError: No module named ‘название_модуля’

Причина: Библиотека не установлена.

Решение: Установите модуль через pip.

Откройте терминал и введите:

1
pip install название_модуля

Если пишет “ERROR: No matching distribution found for название_модуля”, поищите в Google “ModuleNotFoundError: No module named ‘название_модуля’” и найдите правильное имя пакета. Например, для import PIL нужно установить pip install Pillow.

Помните: регистр важен. pygame, а не Pygame или PYGAME.

IndentationError: unindent does not match any outer indentation level

Или: IndentationError: expected an indented block after ‘if’ statement on line X

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

Решение:

  • Используйте пробелы вместо табуляции. В VS Code или PyCharm по умолчанию Tab ставит пробелы.
  • Не смешивайте пробелы и табуляцию.
  • Весь код внутри цикла, условия или функции должен иметь одинаковый отступ.
  • После if, while, def, for, class блок кода смещается на один уровень.Подробнее: Py03. Почему моя программа не работает? (FAQ)

SyntaxError: EOL while scanning string literal

Причина: Вы открыли кавычку (", ‘), но не закрыли, или перепутали одинарные и двойные кавычки.

Решение: Проверьте все строки с кавычками. Убедитесь, что каждая открытая кавычка закрыта той же кавычкой.

SyntaxError: invalid syntax

Причина: Опечатка в коде. Забытое двоеточие, лишняя или недостающая скобка, неправильный синтаксис.

Решение: Внимательно проверьте строку с ошибкой и предыдущие строки. Ищите опечатки.

NameError: name ‘переменная’ is not defined

Причина: Переменная не создана или названа по-другому. Часто из-за опечатки.

Решение: Проверьте, правильно ли написано имя переменной. Убедитесь, что переменная определена до использования.

TypeError: ‘int’ object is not subscriptable

Причина: Пытаетесь использовать индекс (например, x[0]) на числе, а не на коллекции.

Решение: Индексы работают только со строками, списками, кортежами и т.д. Если x — число, это ошибка.

AttributeError: ‘NoneType’ object has no attribute ‘атрибут’

Причина: Функция вернула None, а вы пытаетесь использовать результат как объект.

Решение: Проверьте, что функция действительно возвращает объект, а не None.

“pip” не является внутренней или внешней командой

Причина: Python не добавлен в переменную окружения PATH.

Решение:

  1. Переустановите Python (скачайте с python.org)
  2. Во время установки поставьте галочку “Add Python to PATH”
  3. Закройте и откройте терминал заново

Проверка:

1
2
python --version
pip --version

ZeroDivisionError: division by zero

Причина: Деление на ноль.

Решение: Добавьте проверку перед делением:

1
2
3
4
if denominator != 0:
    result = numerator / denominator
else:
    print("Деление на ноль!")

IndexError: list index out of range

Причина: Обращение к элементу списка по индексу, которого нет.

Решение: Проверьте длину списка перед обращением:

1
2
if index < len(my_list):
    element = my_list[index]

KeyError: ‘ключ’

Причина: Ключ отсутствует в словаре.

Решение: Используйте метод get() или проверьте наличие ключа:

1
value = my_dict.get('ключ', 'default_value')

Или:

1
2
if 'ключ' in my_dict:
    value = my_dict['ключ']

ValueError: invalid literal for int() with base 10: ‘строка’

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

Решение: Добавьте обработку исключений:

1
2
3
4
try:
    number = int(user_input)
except ValueError:
    print("Введите число!")
comments powered by Disqus
Сделано с 💖
Создано при помощи Hugo
Тема Stack, дизайн Jimmy