Объявление тройной строковой кавычки Python - PullRequest
1 голос
/ 15 февраля 2012

Я использую тройную строку следующим образом:

str="""jeff"""
str=""""jeff"""
str=""""jeff""""   # error
str=""""jeff """"

Третий - ошибка, кто-нибудь может объяснить, почему это ошибка?

Ответы [ 3 ]

6 голосов
/ 15 февраля 2012

Три кавычки завершают строку, так что это

str=""""jeff""""

анализируется как это:

str= """ ("jeff) """ (")

Трейлинг-кавычка - проблема.

Кстати, глядя на определение BNF

longstring      ::=  "'''" longstringitem* "'''"
                     | '"""' longstringitem* '"""'

очевидно, что звезда * не жадная, хотя я не знаю, документировано ли это где-то.

В ответ на комментарий это

 str = ''''''''jeff'''

интерпретируется как

(''')(''')('')(jeff)(''') <-- error, two quotes

и это

 str = '''''''''jeff'''

интерпретируется как

 str = (''')(''')(''')(jeff)(''') <-- no error, empty string + jeff
1 голос
/ 15 февраля 2012

Используйте только 3 кавычки.

Вторая строка интерпретируется как: "jeff

Третья строка интерпретируется как:" jeff, за которой следует случайная кавычка.

0 голосов
/ 15 февраля 2012

str = "" "jeff" "" -> str 'jeff'

str = "" "" jeff "" "-> многострочный str 'jeff'

str= "" "" jeff "" "" # error -> здесь парсер думает, что вы объявляете "", "", jeff, "", ""

str = "" "" jeff "" ""# error -> то же, что и предыдущий

>>> """"a""""
  File "<stdin>", line 1
    """"a""""
            ^
SyntaxError: EOL while scanning string literal
>>> """"a """"
  File "<stdin>", line 1
    """"a """"
             ^
SyntaxError: EOL while scanning string literal

Чтобы избежать этого, сделайте так" "" \ "a \" "" "

Также как tng345 упомянуто, вы можете посмотреть в BNF

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...