
В Python строки можно заключать как в одинарные (‘), так и в двойные («) кавычки. Это позволяет избегать экранирования, когда в строке содержится один из этих символов. Например: «Он сказал: ‘Привет'» или ‘Она ответила: «Доброе утро»‘.
Если внутри строки требуется использовать тот же тип кавычек, что и снаружи, их необходимо экранировать с помощью обратного слэша (\). Пример: ‘Он сказал: \’Привет\» или «Она ответила: \»Доброе утро\»». Без экранирования Python интерпретирует внутренние кавычки как закрывающие, что приведёт к синтаксической ошибке.
Для многострочных строк используется тройное заключение: »’текст»’ или «»»текст»»». Внутри таких строк можно свободно использовать как одинарные, так и двойные кавычки без экранирования. Однако при необходимости вставить последовательность »’ или «»» потребуется экранировать отдельные кавычки или использовать другой тип строкового литерала.
При генерации строк программно, особенно в JSON, HTML или SQL, рекомендуется использовать модуль json с функцией json.dumps(), которая автоматически экранирует кавычки и специальные символы. Пример: json.dumps(«ключ: \»значение\»») вернёт корректную строку для сериализации.
Альтернатива ручному экранированию – использование raw-строк с префиксом r. В них обратные слэши не обрабатываются как спецсимволы, но они не отключают правило кавычек, то есть r»строка с \»кавычками\»» по-прежнему требует экранирования кавычек, если используется тот же тип обрамления.
Использование обратного слэша для экранирования

В Python обратный слэш (\) применяется для экранирования символов внутри строк. Это позволяет вставлять кавычки, не нарушая синтаксис.
- Чтобы включить двойную кавычку в строку, заключённую в двойные кавычки:
"Он сказал: \"Привет\"" - Аналогично с одинарной кавычкой:
'Она сказала: \'Нет\'' - Внутри тройных кавычек экранирование не требуется, если кавычки другого типа:
"""Он сказал: 'Да'"""
Частые случаи:
- При генерации JSON-строк вручную:
"{\"ключ\": \"значение\"}" - В регулярных выражениях:
"\\d+" – экранирование обратного слэша для обозначения цифры - При работе с SQL-запросами, если строка содержит кавычки:
"SELECT * FROM users WHERE name = 'O\'Connor'"
Нельзя забывать, что сам обратный слэш – специальный символ. Чтобы включить его в строку, нужно экранировать: "C:\\Users\\Имя".
Для упрощения записи строк с множеством спецсимволов используйте raw-строки, добавляя r перед кавычками: r"C:\Users\Имя". Однако в raw-строках нельзя завершать строку одиночным обратным слэшем: r"строка\\" – допустимо, r"строка\" – вызовет синтаксическую ошибку.
Как работать с одинарными и двойными кавычками в строках
В Python строки можно заключать как в одинарные ' ', так и в двойные " " кавычки. Это позволяет включать один тип кавычек внутрь другого без экранирования. Например: 'Он сказал: "Привет"' или "Это строка с 'вложенными' кавычками".
Если внутри строки требуется использовать тот же тип кавычек, что и снаружи, их нужно экранировать с помощью обратного слэша: 'Это строка с кавычкой: \'' или "Он сказал: \"Да\"". Без экранирования произойдёт синтаксическая ошибка.
Для строк, содержащих как одинарные, так и двойные кавычки, рекомендуется использовать тройные кавычки: '''строка "с кавычками" и 'внутри' одновременно''' или """то же самое""". Тройные кавычки также полезны при создании многострочных строк.
При динамическом формировании строк предпочтительно использовать форматирование через f-строки, чтобы избежать сложного экранирования: name = "Иван"; print(f'Он сказал: "{name}"').
Внутри f-строк экранирование работает так же, как в обычных строках. Если переменная содержит кавычки, не экранируйте их вручную: Python обработает их корректно при вставке.
Экранирование кавычек внутри строк с уже используемыми кавычками
Если строка в Python начинается и заканчивается одинарной кавычкой (‘), и внутри неё требуется использовать такую же кавычку, необходимо экранировать её с помощью обратного слэша:
‘Это isn\’t ошибка’
Аналогично, при использовании двойных кавычек («) для обозначения строки, двойные кавычки внутри нужно экранировать:
«Он сказал: \»Привет\»»
Когда в строке содержатся оба типа кавычек, целесообразно обернуть строку в один тип кавычек, а другой использовать без экранирования. Пример:
«Это строка с ‘вложенными’ кавычками»
Если внутри строки необходимо использовать оба типа кавычек многократно, целесообразно воспользоваться тройными кавычками:
»’Он сказал: «Это ‘пример’ с кавычками.»»’
Тройные кавычки допускают любые вложенные кавычки без экранирования, за исключением последовательностей из трёх одинаковых кавычек подряд – их следует избегать или разбивать с помощью конкатенации.
Ещё один вариант – использовать символ Unicode \u0022 для двойной кавычки и \u0027 для одинарной. Это может быть полезно при формировании строк программно:
‘Это \u0022пример\u0022 с кодами’
Использование тройных кавычек для многострочных строк

В Python многострочные строки удобно задавать с помощью тройных кавычек – »’ или «»». Оба варианта эквивалентны, но выбор зависит от содержания строки: если внутри присутствуют двойные кавычки, целесообразнее использовать тройные одинарные, и наоборот.
Пример:
text = """Первая строка
Вторая строка
"Цитата внутри строки"
Третья строка"""
Такой подход исключает необходимость в явных символах перевода строки (\n) и упрощает включение кавычек внутрь текста без экранирования. Это особенно удобно для хранения шаблонов, SQL-запросов, сообщений с форматированием и комментариев.
Внутри тройных кавычек можно использовать одинарные и двойные кавычки без обратного слэша:
query = '''SELECT * FROM users WHERE name = "Иван" AND role = 'admin';'''
Если требуется избежать начального переноса строки, можно начать строку сразу после кавычек:
text = """Первая строка
Вторая строка"""
Либо использовать слэш для объединения в одну строку без перевода строки:
text = """Это первая строка, \
и продолжение без новой строки."""
Для документирования функций (docstring) предпочтительны тройные двойные кавычки по соглашениям PEP 257:
def greet(name):
"""Возвращает приветствие по имени."""
return f"Привет, {name}!"
Пример экранирования кавычек в строках с f-строками

В f-строках можно использовать как одинарные, так и двойные кавычки, но экранирование требуется при вложении одинакового типа кавычек внутрь строки. Пример с одинарными кавычками:
name = "Анна"
message = f'Он сказал: \'Привет, {name}!\''
Аналогично с двойными:
name = "Анна"
message = f"Он сказал: \"Привет, {name}!\""
Удобнее чередовать тип кавычек, чтобы избежать экранирования:
name = "Анна"
message = f'Он сказал: "Привет, {name}!"'
Если в f-строке требуется вставить обратный слэш, его также нужно экранировать:
path = "C:\\Users\\Admin"
info = f"Путь: {path}\\folder"
Для вложенных кавычек внутри выражения лучше использовать repr() или str():
text = 'Пример "цитаты"'
result = f"Текст: {repr(text)}"
Как экранировать кавычки в строках с символом новой строки

Если строка содержит как кавычки, так и символы новой строки, используйте тройные кавычки – одинарные (»’ »’) или двойные («»» «»»). Это позволяет избежать экранирования символов перевода строки и удобно вставлять цитаты. Например:
text = """Это "цитата",
а это – новая строка."""
Если строка ограничена одиночными кавычками и внутри содержатся двойные, экранировать их не нужно:
text = 'Он сказал: "Привет"\nСледующая строка.'
Если нужно вставить внутрь те же кавычки, что используются для определения строки, экранируйте их обратным слэшем:
text = "Он сказал: \"Привет\"\nСледующая строка."
В f-строках действуют те же правила. Тройные кавычки позволяют удобно вставлять переменные и символы перевода строки:
name = "Алексей"
text = f"""Привет, {name}!
Это "пример" с новой строкой."""
Для генерации строк, содержащих кавычки и символы новой строки из переменных, безопаснее использовать repr() или json.dumps(), если данные будут сериализоваться:
import json
text = json.dumps('строка с "кавычками"\nи новой строкой')
Использование raw-строк для экранирования кавычек

Raw-строки в Python обозначаются префиксом r перед строковым литералом. Они позволяют интерпретировать обратную косую черту (\) как обычный символ, а не как начало управляющей последовательности.
Это особенно полезно при работе с путями Windows и регулярными выражениями, где часто встречаются обратные слэши. Например, строка r"C:\Program Files\" не вызывает ошибку, несмотря на символ \ перед кавычкой. Однако важно помнить: raw-строки не могут оканчиваться одиночным обратным слэшем, например, r"C:\Program Files\" вызовет синтаксическую ошибку. Обход – добавить двойной слэш: r"C:\Program Files\\".
Для кавычек внутри raw-строки всё зависит от того, какие кавычки используются для её объявления. Если строка начинается с двойных кавычек, внутри неё можно использовать одинарные без экранирования: r"Путь к файлу: 'C:\data\file.txt'". При необходимости включить те же кавычки, что используются для объявления строки, их нужно экранировать: r"Он сказал: \"Привет\"". Здесь экранирование всё ещё работает, потому что кавычки – это исключение: несмотря на префикс r, Python обрабатывает их как часть синтаксиса.
Raw-строки упрощают работу с кавычками в тех случаях, когда необходимо сохранить множество обратных слэшей. Но при вставке кавычек, совпадающих с ограничителями строки, экранирование остаётся обязательным.
Подходы к экранированию кавычек в JSON-строках

JSON требует использования двойных кавычек для обозначения строк и ключей. Вложенные кавычки необходимо экранировать с помощью обратного слэша. В Python это важно учитывать при сериализации и десериализации данных.
- Для ручного формирования JSON-строки вложенные двойные кавычки экранируются:
{ "key": "значение с \\\"кавычками\\\"" }. В Python такая строка выглядит как:'{ "key": "значение с \\"кавычками\\"" }'. - При использовании
json.dumps()Python автоматически экранирует кавычки. Пример:json.dumps({"key": "значение с \"кавычками\""})вернёт'{"key": "значение с \\"кавычками\\""}'. - Обратное преобразование через
json.loads()восстанавливает оригинальные кавычки без экранирования:json.loads('{"key": "значение с \\"кавычками\\""}')даст{"key": 'значение с "кавычками"'}. - Множественные уровни сериализации требуют многократного экранирования. Например, если JSON встраивается в строку другого JSON, кавычки экранируются дважды:
\\"превращается в\\\\\\"при втором уровне сериализации. - Нельзя использовать одинарные кавычки вместо двойных в JSON – это приведёт к ошибке
json.decoder.JSONDecodeError.
Рекомендуется избегать ручного составления JSON-строк. Вместо этого используйте json.dumps() и, при необходимости, вложенную сериализацию с контролем уровней экранирования через промежуточные переменные.
Вопрос-ответ:
Как правильно экранировать кавычки внутри строки в Python?
В Python для экранирования кавычек внутри строки можно использовать обратный слэш. Например, если в строке нужно использовать одинарную кавычку внутри строки, ограниченной одинарными кавычками, следует написать так: `’I\’m here’`. Если требуется использовать двойные кавычки внутри строки, заключённой в двойные, то можно экранировать их так: `»He said, \»Hello!\»»`.
