Както знаем, език за програмиране като Python е интерпретиран език, което по същество предполага, че всеки блок или ред код се обработва един след един, вместо да се променя цялата програма в код на ниско ниво.
Всеки път, когато интерпретаторът на Python сканира ред от код и забележи нещо необичайно, той извежда грешка, известна като синтактична грешка. Като цяло липсващата скоба, липсващият краен цитат и други фундаментални аномалии в синтаксиса са причината за възникването на грешките.
В следващия урок ще открием една от синтактичните грешки в Python, известна като EOL, която обикновено се повдига, когато се опитваме да сканираме низов литерал.
Разбиране на значението на EOL
Трябва да разберем значението на EOL ефективно, преди да разрешим проблем. EOL е съкращение от „End of Line“. EOL грешката означава, че интерпретаторът на Python е достигнал края на реда, докато сканира литерала на низа.
Низовите литерали, известни също като константи, трябва да бъдат оградени в единични или двойни кавички. Достигането на „Края на реда“, когато се опитваме да сканираме, означава, че сме достигнали последния знак на низа и не сме срещнали крайните кавички.
Нека разгледаме основен пример, демонстриращ как се повдига EOL грешката.
Пример:
# defining a string value my_string = 'This is my string literal, and it is broken... # printing the string value print('String:', my_string)
Изход:
File 'D:Python ernarypy.py', line 2 my_string = 'This is my string literal, and it is broken... ^ SyntaxError: EOL while scanning string literal
Обяснение:
В горния кодов фрагмент сме дефинирали низов литерал; обаче пропуснахме кавичка в края на низа, което повдигна синтактична грешка наречен EOL, докато отпечатва този низ за потребителите.
В изходната секция можем да наблюдаваме малка стрелка, сочеща към последния знак от низа, демонстрирайки, че грешката е възникнала, когато програмата се е опитала да анализира този сегмент от израза.
Сега, след като разбрахме проблема, нека разберем някои случаи, в които тази грешка може да се появи при изпълнение на код на Python.
Коригиране на „Синтактична грешка: EOL при сканиране на низов литерал.“
Можем да срещнем тази грешка в четири основни ситуации, докато работим върху програма на Python. Тези четири основни ситуации са както е показано по-долу:
- Липсва крайната кавичка
- Използване на неправилна крайна кавичка
- Постоянно разтягане на низа до няколко реда
- Използване на обратна наклонена черта преди крайната кавичка
Нека започнем да разбираме всяка от тези ситуации и да се опитаме да ги заобиколим.
Липсва крайната кавичка
Както беше обсъдено в предишния фрагмент от код, интерпретаторът на Python предизвиква синтактична грешка всеки път, когато достигне края на литерала на низа и открие, че кавичката липсва.
Пример:
# defining a string value my_string = 'This is my string literal, and it is broken... # printing the string value print('String:', my_string)
Обяснение:
Можем да забележим, че кавичката в края на литералния низ липсва, което също оправдава синтактичната грешка. Всеки език има няколко основни правила по отношение на синтаксиса, които, когато бъдат нарушени, водят до грешки.
Нека сега разгледаме следния синтаксис като решение на горния проблем.
Решение:
# defining a string value my_string = 'This is my string literal, and it is broken...' # printing the string value print('String:', my_string)
Изход:
String: This is my string literal, and it is broken...
Обяснение:
В горния кодов фрагмент можем да забележим, че сме включили кавичките в края на литералния низ. В резултат на това низът се отпечатва успешно за потребителите, без да се предизвиква синтактична грешка.
Използване на неправилна крайна кавичка
Можем да се възползваме от ' ' както и ' ' за да оградите определена низова константа в Python. Програмистът обаче често използва неправилни кавички в края на стойността на низа. Такава ситуация кара програмата да генерира синтактична грешка по отношение на EOL.
Нека разгледаме подобна ситуация в следния пример:
Пример:
# defining a string value my_string = 'This is my string literal with wrong quotation mark at the end.' # printing the string value print('String:', my_string)
Изход:
File 'D:Python ernarypy.py', line 2 my_string = 'This is my string literal with wrong quotation mark at the end.' ^ SyntaxError: EOL while scanning string literal
Обяснение:
В горния кодов фрагмент сме използвали неправилна кавичка в края на стойността на низа, което води до синтактична грешка.
Можем да избегнем такъв проблем, като използваме съвпадащата кавичка в края на низа, както е показано в следния кодов фрагмент.
Решение:
# defining a string value my_string = 'This is my string literal with wrong quotation mark at the end.' # printing the string value print('String:', my_string)
Изход:
String: This is my string literal with wrong quotation mark at the end.
Обяснение:
В горния кодов фрагмент, както можем да забележим, сме използвали съвпадащата кавичка в края на низа, която ни помага да избегнем всякакви EOL грешки.
Постоянно разтягане на низа до няколко реда
Има различни начинаещи програмисти на Python, които правят грешката да разтягат изразите на повече от един ред. Python взема предвид нов ред като край на израза, за разлика от други езици като C++ и Java, които считат ';' като край на изявленията.
Нека разгледаме пример, демонстриращ същия проблем.
Пример за проблем:
# defining a string value my_string = 'This is my string literal... this is my new line' # printing the string value print('String:', my_string)
Изход:
File 'D:Python ernarypy.py', line 2 my_string = 'This is my string literal... ^ SyntaxError: EOL while scanning string literal
Обяснение:
isletter java
В горния кодов фрагмент можем да забележим, че кодът може да изглежда обикновен; обаче, веднага щом започне следващият ред, интерпретаторът на Python слага край на това изявление, предизвиквайки синтактична грешка за неограждане на константата на низа.
Въпреки това можем да разрешим този проблем, като използваме различни методи, както е показано по-долу:
Решение 1: Използване на ' ' за осигуряване на ефекта на нов ред към константата на низа
# defining a string value my_string = 'This is my string literal... this is my new line' # printing the string value print('String:', my_string)
Изход:
String: This is my string literal... this is my new line
Обяснение:
В горния кодов фрагмент сме включили 'н' в константата на низа, за да осигурите ефекта на нов ред към нея. В резултат на това низовата константа разделя оператора на няколко реда.
Сега нека разгледаме друго решение.
Решение 2: Използване на тройни кавички, ''' или ''' за съхраняване на многоредови низови константи
# defining a string value my_string = '''This is my string literal... this is my new line''' # printing the string value print('String:', my_string)
Изход:
String: This is my string literal... this is my new line
Обяснение:
В горния кодов фрагмент сме използвали тройната кавичка, ''' за да съхранявате многоредови низови константи.
Използване на обратна наклонена черта преди крайната кавичка
Обратната наклонена черта '' е отговорен за екранирането на низа и причинява синтактичната грешка.
Нека разгледаме следния пример.
Пример:
# storing a directory path my_string = 'D:PythonMy_Folder' # printing the string value print('String:', my_string)
Изход:
File 'D:Python ernarypy.py', line 2 my_string = 'D:PythonMy_Folder' ^ SyntaxError: EOL while scanning string literal
Обяснение:
В горния кодов фрагмент сме използвали обратна наклонена черта '' за да разделите пътищата на папката един от друг. Въпреки това, по време на изпълнението на програмата, интерпретаторът на Python повдигна грешка в синтаксиса.
Последната обратна наклонена черта преди кавичката избягва константата на низа и интерпретаторът на Python счита ' като единичен знак. Тази екранираща последователност се превежда в кавичка (') .
Можем да разрешим този проблем, като използваме следния кодов фрагмент.
Решение:
# storing a directory path my_string = 'D:\Python\My_Folder\' # printing the string value print('String:', my_string)
Изход:
String: D:PythonMy_Folder
Обяснение:
В горния кодов фрагмент сме използвали '\' в константата на низа. В резултат на това интерпретаторът на Python изпълнява този низ, без да генерира грешка.