Ситуация: мы пишем калькулятор конвертации разных величин: фунты в килограммы, мили в километры и всё такое. Чтобы было проще, мы задаём константы, которые пригодятся нам при переводе величин:
miles = 1,61km
pound = 0,454kg
Когда заданы все правила перевода, мы запускаем калькулятор, но почему-то получаем ошибку:
❌ SyntaxError: Invalid Decimal Literal
Что это значит: Python встретил странное десятичное число, с которым он не знает как работать дальше. Официально говоря — неверный десятичный литерал. Звучит умно, сейчас расскажем, что это значит.
Когда встречается: когда мы неправильно задаём какие-то числовые значения — например, используем неправильный синтаксис или нарушаем логику Python. Обычно это возникает в таких случаях:
- десятичное значение содержит буквы;
- идентификатор начинается с цифры.
Синтаксис Python предполагает, что десятичный литерал не может содержать буквы. Такие значения будут недопустимыми десятичными литералами:
- 3.14x;
- 13kg;
- 5y;
- 700m.
То же самое с идентификаторами — произвольными именами переменных, функций, классов и так далее. В Python любой литерал, который начинается с цифр, считается десятичным, независимо от того, на какой стороне оператора он находится. Поэтому, если идентификатор начинается с цифры, Python считает его десятичным литералом:
- 1variable;
- 100_words.
Если так назвать переменную (которая начинается с цифры) — это тоже будет ошибкой.
Что делать с ошибкой SyntaxError: Invalid Decimal Literal
Чтобы разобраться с ошибкой, поговорим сначала о литералах — представлениях какого-то фиксированного значения в программе. Вот примеры разных литералов:
'Привет, Код!'
— строковый литерал;5
— числовой литерал;[1, 2, 3, 4]
— литерал списка;True
— логический литерал;None
— специальный литерал.
Десятичный литерал — это числовой литерал, который содержит десятичную точку, например 3.14.
Вот пример десятичного литерала в качестве аргумента:
# вызываем функцию с числовым аргументом
addPrice(1045)
Чтобы решить проблему с ошибкой SyntaxError: Invalid Decimal Literal, нужно удалить буквы в числовых значениях.
miles = 1,61
pound = 0,454
А если идентификатор начинается с цифр, нужно либо их удалить, либо написать буквами:
# этот код выдаст ошибку
1variable = 123
# а это правильный код
variable = 123
# этот код выдаст ошибку
100_words = range(0, 100)
# а это правильный код
hundred_words = range(0, 100)