Справочник · ошибки Python

ValueError

Тип подходит, а значение — нет. Чаще всего так бывает, когда int() получает текст, в котором не число.

Python пишет ошибку в последней строке сообщения: сначала название, после двоеточия — подробности. Найди своё сообщение ниже — рядом объяснение простыми словами и что исправить.

Значение не делится на части

ValueError: too many values to unpack (expected 2)
Что случилось
Значение не раскладывается на столько переменных, сколько записано слева.
Почему так бывает
Цикл по самому словарю даёт только ключи, а не пары. Пары даёт метод items.
Как исправить
Пиши for ключ, значение in словарь.items().

Разбираем в уроке 6.2 «Обход словаря».

Это не число

number = int("привет")
Python сообщает об ошибке
ValueError: invalid literal for int() with base 10: 'привет'
Что случилось
int() превращает в число только цифры, а пришло что-то другое.
Почему так бывает
Например, пустая строка или слово.
Как исправить
Проверь, что вводишь цифры.

Разбираем в уроке 1.5 «Число и текст — превращения».

Нечего убирать

ValueError: list.remove(x): x not in list
Что случилось
Такого элемента нет в списке.
Почему так бывает
Метод remove убирает элемент по значению, а значения в списке нет. Возможно, опечатка или он уже удалён.
Как исправить
Проверь значение. Перед remove можно проверить через in.

Разбираем в уроке 4.2 «Меняем список».

Файл уже закрыт

ValueError: I/O operation on closed file
Что случилось
Ты работаешь с файлом после того, как блок with закончился.
Почему так бывает
Блок with закрывает файл сам, когда его строчки заканчиваются. Дальше файл недоступен.
Как исправить
Всё, что нужно сделать с файлом, пиши внутри блока with, с отступом.

Разбираем в уроке 8.1 «Читаем файл».

Функция остановила программу

def set_age(age):
    if age < 0:
        raise ValueError("Возраст не бывает отрицательным")
    return age

print(set_age(-5))
Python сообщает об ошибке
ValueError: Возраст не бывает отрицательным
Что случилось
Сработал raise: Возраст не бывает отрицательным.
Почему так бывает
Так функция сообщает, что получила неподходящие данные. Команда raise сама поднимает ошибку.
Как исправить
Передай подходящие данные или поймай эту ошибку через try и except ValueError.

Разбираем в уроке 7.3 «Защита и свои ошибки».

Другие ошибки