Kao što znamo da je programski jezik poput Pythona interpretirani jezik, što u suštini implicira da se svaki blok ili linija koda obrađuje jedan po jedan, umjesto da se cijeli program potpuno mijenja u kod niske razine.
Kad god tumač Pythona skenira liniju koda i primijeti nešto neobično, pojavljuje se pogreška poznata kao sintaktička pogreška. Općenito, nedostajuća zagrada, nedostajući završni navodnik i druge temeljne anomalije u sintaksi uzrok su pojavljivanja pogrešaka.
U sljedećem vodiču otkrit ćemo jednu od sintaktičkih pogrešaka u Pythonu poznatu kao EOL, koja se obično javlja kada pokušamo skenirati string literal.
Razumijevanje značenja EOL
Prije rješavanja problema moramo učinkovito razumjeti značenje EOL-a. EOL je skraćenica za 'End of Line'. EOL pogreška znači da je tumač Pythona došao do kraja retka dok je skenirao literal niza.
String literali, također poznati kao konstante, moraju biti u jednostrukim ili dvostrukim navodnicima. Dosezanje 'kraja retka' kada pokušavamo skenirati znači da smo došli do posljednjeg znaka niza i da nismo naišli na završne navodnike.
Razmotrimo osnovni primjer koji pokazuje kako se javlja EOL pogreška.
Primjer:
# defining a string value my_string = 'This is my string literal, and it is broken... # printing the string value print('String:', my_string)
Izlaz:
File 'D:Python ernarypy.py', line 2 my_string = 'This is my string literal, and it is broken... ^ SyntaxError: EOL while scanning string literal
Obrazloženje:
U gornjem isječku koda definirali smo string literal; međutim, propustili smo navodnik na kraju niza, što je podiglo sintaktička pogreška naziva EOL dok ispisuje taj niz za korisnike.
U izlaznom odjeljku možemo vidjeti malu strelicu koja pokazuje na zadnji znak niza, pokazujući da je do pogreške došlo kada je program pokušao raščlaniti taj segment izjave.
Sada kada smo razumjeli problem, pokušajmo razumjeti neke slučajeve u kojima se ova pogreška može pojaviti tijekom izvršavanja python koda.
Ispravljanje 'Sintaktičke pogreške: EOL tijekom skeniranja string literala.'
Ovu pogrešku možemo susresti u četiri glavne situacije tijekom rada na Python programu. Ove četiri glavne situacije su prikazane u nastavku:
- Nedostaje krajnji navodnik
- Korištenje netočnog navodnika na kraju
- Konstantno rastezanje niza na više redaka
- Korištenje obrnute kose crte prije završnog znaka navoda
Počnimo razumjeti svaku od ovih situacija i pokušajmo ih zaobići.
Nedostaje krajnji navodnik
Kao što je objašnjeno u prethodnom isječku koda, Python tumač javlja sintaktičku pogrešku kad god dođe do kraja literala niza i otkrije da nedostaje navodnik.
Primjer:
# defining a string value my_string = 'This is my string literal, and it is broken... # printing the string value print('String:', my_string)
Obrazloženje:
Možemo uočiti da nedostaje navodnik na kraju literalnog niza, što također opravdava sintaktičku pogrešku. Svaki jezik ima nekoliko temeljnih pravila u vezi sa sintaksom, koja, kada se prekrše, rezultiraju pogreškama.
Razmotrimo sada sljedeću sintaksu kao rješenje za gornji problem.
Riješenje:
# defining a string value my_string = 'This is my string literal, and it is broken...' # printing the string value print('String:', my_string)
Izlaz:
String: This is my string literal, and it is broken...
Obrazloženje:
U gornjem isječku koda možemo primijetiti da smo uključili navodnike na kraju literalnog niza. Kao rezultat toga, niz se uspješno ispisuje za korisnike bez ikakve sintaktičke pogreške.
Korištenje netočnog navodnika na kraju
Možemo iskoristiti ' ' kao i ' ' kako bi se u Python uključila određena string konstanta. Međutim, programer često koristi netočan navodnik na kraju vrijednosti niza. Takva situacija uzrokuje da program pokrene grešku sintakse u smislu EOL-a.
Razmotrimo takvu situaciju na sljedećem primjeru:
Primjer:
# 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)
Izlaz:
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
Obrazloženje:
U gornjem isječku koda upotrijebili smo netočan navodnik na kraju vrijednosti niza koji rezultira sintaktičkom pogreškom.
Takav problem možemo izbjeći korištenjem odgovarajućeg navodnika na kraju niza, kao što je prikazano u sljedećem isječku koda.
Riješenje:
# 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)
Izlaz:
String: This is my string literal with wrong quotation mark at the end.
Obrazloženje:
U gornjem isječku koda, kao što možemo primijetiti, upotrijebili smo odgovarajući znak navodnika na kraju niza koji nam pomaže da izbjegnemo bilo kakvu EOL pogrešku.
Konstantno rastezanje niza na više redaka
Postoje razni Python programeri početnici koji griješe rastežući izjave na više od jednog reda. Python uzima u obzir novi red kao kraj naredbe, za razliku od drugih jezika kao što su C++ i Java koji uzimaju u obzir ';' kao završetak iskaza.
Razmotrimo primjer koji pokazuje isti problem.
Primjer problema:
# defining a string value my_string = 'This is my string literal... this is my new line' # printing the string value print('String:', my_string)
Izlaz:
File 'D:Python ernarypy.py', line 2 my_string = 'This is my string literal... ^ SyntaxError: EOL while scanning string literal
Obrazloženje:
što je stog u Javi
U gornjem isječku koda možemo primijetiti da kod može izgledati uobičajeno; međutim, čim se započne sljedeći redak, Python tumač stavlja točku na tu izjavu izazivajući sintaktičku pogrešku jer nije uključila konstantu niza.
Međutim, ovaj problem možemo riješiti različitim metodama kao što je prikazano u nastavku:
Rješenje 1: Upotreba ' ' za pružanje efekta novog retka konstanti niza
# defining a string value my_string = 'This is my string literal... this is my new line' # printing the string value print('String:', my_string)
Izlaz:
String: This is my string literal... this is my new line
Obrazloženje:
U gornji isječak koda uključili smo ' ' u konstanti niza kako biste joj pružili učinak novog retka. Kao rezultat toga, konstanta niza rastavlja iskaz u više redaka.
Razmotrimo sada drugo rješenje.
Rješenje 2: Upotreba trostrukih navodnika, ''' ili ''' za pohranjivanje konstanti niza s više redaka
# defining a string value my_string = '''This is my string literal... this is my new line''' # printing the string value print('String:', my_string)
Izlaz:
String: This is my string literal... this is my new line
Obrazloženje:
U gornjem isječku koda upotrijebili smo trostruki navodnik, ''' kako bi se pohranile višeredne string konstante.
Korištenje obrnute kose crte prije završnog znaka navoda
Obrnuta kosa crta '' je odgovoran za izbjegavanje niza i uzrokuje sintaktičku pogrešku.
Razmotrimo sljedeći primjer.
Primjer:
# storing a directory path my_string = 'D:PythonMy_Folder' # printing the string value print('String:', my_string)
Izlaz:
File 'D:Python ernarypy.py', line 2 my_string = 'D:PythonMy_Folder' ^ SyntaxError: EOL while scanning string literal
Obrazloženje:
U gornjem isječku koda upotrijebili smo obrnutu kosu crtu '' kako biste odvojili staze mape jednu od druge. Međutim, tijekom izvođenja programa, Python tumač je pokrenuo sintaktičku pogrešku.
Posljednja obrnuta kosa crta prije znaka navoda izbjegava konstantu niza, a Python tumač uzima u obzir ' kao jedan lik. Ova escape sekvenca prevodi se u navodnike (') .
Ovaj problem možemo riješiti pomoću sljedećeg isječka koda.
Riješenje:
# storing a directory path my_string = 'D:\Python\My_Folder\' # printing the string value print('String:', my_string)
Izlaz:
String: D:PythonMy_Folder
Obrazloženje:
U gornjem isječku koda koristili smo '\' u konstanti niza. Kao rezultat toga, Python tumač izvršava taj niz bez pokretanja pogreške.