După cum știm că un limbaj de programare precum Python este un limbaj interpretat, ceea ce implică în esență că fiecare bloc sau linie de cod este procesată unul după unul, mai degrabă decât schimbarea întregului program într-un cod de nivel scăzut.
Ori de câte ori interpretul Python scanează o linie de cod și observă ceva neexcepțional, generează o eroare cunoscută sub numele de Eroare de sintaxă. În general, o paranteză lipsă, ghilimele de sfârșit lipsă și alte anomalii fundamentale în sintaxă sunt motivul pentru care au apărut erori.
În următorul tutorial, vom descoperi una dintre erorile de sintaxă din Python cunoscută sub numele de EOL, care de obicei apare atunci când încercăm să scanăm un șir literal.
Înțelegerea semnificației EOL
Trebuie să înțelegem în mod eficient sensul EOL înainte de a rezolva o problemă. EOL este prescurtarea pentru „End of Line”. Eroarea EOL înseamnă că interpretul Python a ajuns la sfârșitul liniei în timp ce scana literalul șirului.
Literale șir, cunoscute și ca constante, trebuie să fie cuprinse între ghilimele simple sau duble. Atingerea „Sfârșitul rândului” atunci când încercăm să scanăm înseamnă că am ajuns la ultimul caracter al șirului și nu am întâlnit ghilimelele de sfârșit.
Să luăm în considerare un exemplu de bază care demonstrează modul în care este generată eroarea EOL.
Exemplu:
# defining a string value my_string = 'This is my string literal, and it is broken... # printing the string value print('String:', my_string)
Ieșire:
File 'D:Python ernarypy.py', line 2 my_string = 'This is my string literal, and it is broken... ^ SyntaxError: EOL while scanning string literal
Explicaţie:
În fragmentul de cod de mai sus, am definit un literal șir; cu toate acestea, am ratat un ghilimele de la sfârșitul șirului, care a ridicat eroare de sintaxă numit EOL în timp ce imprima acel șir pentru utilizatori.
În secțiunea de ieșire, putem observa o săgeată mică care indică ultimul caracter al șirului, demonstrând că eroarea a apărut atunci când programul a încercat să analizeze acel segment al instrucțiunii.
Acum că am înțeles problema, permiteți-ne să înțelegem câteva cazuri în care această eroare poate apărea în timpul executării unui cod Python.
Remedierea „Eroare de sintaxă: EOL în timpul scanării șirului literal”.
Putem întâlni această eroare în patru situații principale în timp ce lucrăm la un program Python. Aceste patru situații principale sunt prezentate mai jos:
- Lipsește ghilimelele de la sfârșit
- Folosind ghilimele de sfârșit incorect
- Întindere constantă a șirului pe mai multe linii
- Utilizarea barei oblice inverse înainte de ghilimele de la sfârșit
Să începem să înțelegem fiecare dintre aceste situații și să încercăm să le rezolvăm.
Lipsește ghilimelele de la sfârșit
După cum sa discutat în fragmentul anterior de cod, interpretul Python ridică o eroare de sintaxă ori de câte ori ajunge la sfârșitul literalului șir și descoperă că ghilimelele lipsesc.
Exemplu:
# defining a string value my_string = 'This is my string literal, and it is broken... # printing the string value print('String:', my_string)
Explicaţie:
Putem observa că ghilimelele de la sfârșitul șirului literal lipsesc, ceea ce justifică și eroarea de sintaxă. Fiecare limbă are câteva reguli fundamentale în ceea ce privește sintaxa, care, atunci când sunt încălcate, duc la erori.
Să considerăm acum următoarea sintaxă ca soluție pentru problema de mai sus.
Soluţie:
# defining a string value my_string = 'This is my string literal, and it is broken...' # printing the string value print('String:', my_string)
Ieșire:
String: This is my string literal, and it is broken...
Explicaţie:
În fragmentul de cod de mai sus, putem observa că am inclus ghilimele la sfârșitul șirului literal. Ca rezultat, șirul este tipărit pentru utilizatori cu succes fără a genera nicio eroare de sintaxă.
Folosind ghilimele de sfârșit incorect
Putem folosi ' ' precum și ' ' pentru a include o anumită constantă șir în Python. Cu toate acestea, un programator folosește adesea ghilimele incorecte la sfârșitul valorii șirului. O astfel de situație face ca programul să ridice o eroare de sintaxă în ceea ce privește EOL.
Să luăm în considerare o astfel de situație în exemplul următor:
Exemplu:
# 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)
Ieșire:
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
Explicaţie:
În fragmentul de cod de mai sus, am folosit ghilimelele incorecte de la sfârșitul valorii șirului, ceea ce duce la o eroare de sintaxă.
Putem evita o astfel de problemă utilizând ghilimelele potrivite de la sfârșitul șirului, așa cum se arată în următorul fragment de cod.
Soluţie:
# 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)
Ieșire:
String: This is my string literal with wrong quotation mark at the end.
Explicaţie:
În fragmentul de cod de mai sus, după cum putem observa, am folosit ghilimelele potrivite de la sfârșitul șirului care ne ajută să evităm orice eroare EOL.
Întindere constantă a șirului pe mai multe linii
Există diferiți programatori Python începători care fac greșeala de a extinde declarațiile la mai mult de o linie. Python ia în considerare o nouă linie ca sfârșit al declarației, spre deosebire de alte limbaje, cum ar fi C++ și Java, care consideră ';' ca sfârșit de declarații.
Să luăm în considerare un exemplu care demonstrează aceeași problemă.
Exemplu de problemă:
# defining a string value my_string = 'This is my string literal... this is my new line' # printing the string value print('String:', my_string)
Ieșire:
File 'D:Python ernarypy.py', line 2 my_string = 'This is my string literal... ^ SyntaxError: EOL while scanning string literal
Explicaţie:
șir boolean java
În fragmentul de cod de mai sus, putem observa că codul poate părea obișnuit; cu toate acestea, de îndată ce linia următoare este începută, interpretul Python pune capăt acelei declarații, ridicând o eroare de sintaxă pentru că nu a inclus constanta șir.
Cu toate acestea, putem rezolva această problemă folosind diferite metode, după cum se arată mai jos:
Soluția 1: Folosind „ ” pentru a furniza efectul unei noi linii constantei șir
# defining a string value my_string = 'This is my string literal... this is my new line' # printing the string value print('String:', my_string)
Ieșire:
String: This is my string literal... this is my new line
Explicaţie:
În fragmentul de cod de mai sus, am inclus ' ' în constanta șir pentru a oferi efectul unei noi linii. Ca rezultat, constanta șir desparte declarația în mai multe rânduri.
Acum să luăm în considerare o altă soluție.
Soluția 2: Folosind ghilimele triple, „’’ sau „’’ pentru a stoca constante de șir de mai multe linii
# defining a string value my_string = '''This is my string literal... this is my new line''' # printing the string value print('String:', my_string)
Ieșire:
String: This is my string literal... this is my new line
Explicaţie:
În fragmentul de cod de mai sus, am folosit ghilimelele triple, ''' pentru a stoca constante de șir de mai multe linii.
Utilizarea barei oblice inverse înainte de ghilimele de la sfârșit
Bara oblică inversă '' este responsabil pentru evadarea șirului și provoacă eroarea de sintaxă.
Să luăm în considerare următorul exemplu.
Exemplu:
# storing a directory path my_string = 'D:PythonMy_Folder' # printing the string value print('String:', my_string)
Ieșire:
File 'D:Python ernarypy.py', line 2 my_string = 'D:PythonMy_Folder' ^ SyntaxError: EOL while scanning string literal
Explicaţie:
În fragmentul de cod de mai sus, am folosit bara oblică inversă '' pentru a separa căile folderului unele de altele. Cu toate acestea, în timpul execuției programului, interpretul Python a ridicat eroarea de sintaxă.
Ultima bară oblică inversă înainte de ghilimele scapă din constanta șir, iar interpretul Python ia în considerare ' ca un singur personaj. Această secvență de evadare se traduce prin ghilimele (') .
Putem rezolva această problemă folosind următorul fragment de cod.
Soluţie:
# storing a directory path my_string = 'D:\Python\My_Folder\' # printing the string value print('String:', my_string)
Ieșire:
String: D:PythonMy_Folder
Explicaţie:
În fragmentul de cod de mai sus, am folosit '\' în constanta șirului. Ca rezultat, interpretul Python execută acel șir fără a genera o eroare.