Почему возникает «SyntaxError: (ошибка Юникода)», когда необработанная строка заключена в тройные кавычки? - PullRequest
0 голосов
/ 08 мая 2019

Всякий раз, когда я помещаю тройные кавычки вокруг необработанной строки, возникает следующая ошибка:

SyntaxError: (ошибка Unicode) кодек «unicodeescape» не может декодировать байты в позиции 28-29: некорректный символ \ N, экранирование

Мне было интересно, почему это так и есть ли способ избежать этого.

Я пытался переместить тройные кавычки для выравнивания с различными частями кода, но пока ничего не получалось.

Это работает без ошибок:

final_dir = (r'C:\Documents\Newsletters')

'''
path_list = []
for file in os.listdir(final_dir):
    path = os.path.join(final_dir, file)
    path_list.append(path)
'''

Но тогда возникает ошибка:

'''
final_dir = (r'C:\Documents\Newsletters')
path_list = []
for file in os.listdir(final_dir):
    path = os.path.join(final_dir, file)
    path_list.append(path)
'''

1 Ответ

1 голос
/ 08 мая 2019

В строковом литерале, таком как '\N', \N имеет специальное значение:

\N{name} Символ с именем имя в базе данных Unicode

из Строковые и байтовые литералы - документация по Python 3

Например, '\N{tilde}' становится '~'.

Поскольку вы цитируете код, вы, вероятно, захотите использовать необработанный строковый литерал:

r'\N'

Например:

>>> r"""r'C:\Documents\Newsletters'"""
"r'C:\\Documents\\Newsletters'"

Или вы можете избежать обратной косой черты:

'\\N'

Ошибка не возникает для \D, поскольку она не имеет специального значения.

Спасибо deceze за практическую запись этого ответа в комментариях

...