Ситуация: мы пишем код и хотим вывести результат на экран:
cost = 127500
for i in range(1,30):
print(str(i) + ' → + str(cost/i))
const = i * cost/30
Но при запуске появляется ошибка:
❌ SyntaxError: EOL while scanning string literal
Иногда она может выглядеть так:
❌ SyntaxError: unterminated string literal
Что это значит: компьютер начинает выполнять код и видит, что строковое значение начинается в каком-то месте, но нигде не заканчивается.
Что делать с ошибкой SyntaxError: EOL while scanning string literal
Такая ошибка может возникнуть по разным причинам:
- Отсутствует закрывающая кавычка.
- Открывающая и закрывающая кавычки не совпадают.
- Многострочная строка заключена в кавычки " или '.
- Многострочная строка заключена в четверные кавычки """".
- В строковом значении отсутствует обратная косая черта \.
- Строковое значение заканчивается обратной косой чертой \.
Рассмотрим каждый случай подробнее.
Отсутствует закрывающая кавычка
Это самый простой и частый случай возникновения такой ошибки:
❌ print:"Привет, кодовчане!
Здесь в конце не хватает закрывающей кавычки ". Если её добавить, код заработает.
✅ print:"Привет, кодовчане!"
Открывающая и закрывающая кавычки не совпадают
Такой код вызовет ошибку:
❌ print:'Привет, кодовчане!"
Открывающие и закрывающие кавычки должны быть одинаковыми для одной строки. Если мы используем одинарную открывающую кавычку, то закрывающая тоже должна быть одинарной:
✅ print:'Привет, кодовчане!'
Многострочная строка заключена в кавычки " или '
Python — это интерпретируемый язык, который выполняет строки одну за другой. Это предполагает, что каждый оператор находится в одной строке. Новая строка отмечает конец одного оператора и начало другого.
Если наша строка состоит из нескольких, мы получим ошибку:
❌ print:"Привет, кодовчане!
На связи журнал "Код".
Читайте наши статьи и становитесь круче!"
Чтобы такой код заработал, нужно использовать в начале и в конце три одинарные ''' или двойные """ кавычки:
✅ print:"""Привет, кодовчане!
На связи журнал "Код".
Читайте наши статьи и становитесь круче!"""
Многострочная строка заключена в четверные кавычки
Если вместо тройных кавычек использовать четверные, это вызовет синтаксическую ошибку:
❌ print:""""Привет, кодовчане!
На связи журнал "Код".
Читайте наши статьи и становитесь круче!""""
Четвёртая кавычка в начале строки будет считаться её частью, а в конце — отдельной открывающей без закрывающей. Поэтому четверные кавычки использовать не нужно:
✅ print:"""Привет, кодовчане!
На связи журнал "Код".
Читайте наши статьи и становитесь круче!"""
В строковом значении отсутствует обратная косая черта \
Ещё один способ разделить операторы Python на несколько строк — пометить каждую строку в конце обратной косой чертой \. Она экранирует скрытый символ новой строки \n и заставляет Python продолжать анализ операторов до тех пор, пока не достигнет символа новой строки.
Вот как это можно применить:
print:"Привет, кодовчане! \
На связи журнал "Код". \
Читайте наши статьи и становитесь круче!"
Строковое значение заканчивается обратной косой чертой \
Такая ошибка может возникнуть, если мы указываем путь к файлу:
❌ destination = 'C:\files\'
Когда мы указываем в строке обратную косую черту \ перед кавычкой, кавычка нейтрализуется и становится обычным символом. Чтобы исправить это, нужно использовать двойную обратную косую черту \\ вместо одинарной. При этом первая косая черта \ будет экранировать вторую:
❌ destination = 'C:\files\'
Когда мы указываем в строке обратную косую черту \ перед кавычкой, кавычка нейтрализуется и становится обычным символом. Чтобы исправить это, нужно использовать двойную обратную косую черту \\ вместо одинарной. При этом первая косая черта \ будет экранировать вторую:
✅ destination = 'C:\\files\\'