Kot vemo, je programski jezik, kot je Python, interpretirani jezik, kar v bistvu pomeni, da se vsak blok ali vrstica kode obdeluje enega za drugim, namesto da bi se celoten program spremenil v nizkonivojsko kodo.
Kadarkoli tolmač Pythona pregleda vrstico kode in opazi nekaj neobičajnega, sproži napako, znano kot sintaksna napaka. Na splošno so bile napake prikazane zaradi manjkajočega oklepaja, manjkajočega končnega narekovaja in drugih temeljnih nepravilnosti v sintaksi.
V naslednji vadnici bomo odkrili eno od sintaksnih napak v Pythonu, znano kot EOL, ki se običajno sproži, ko poskušamo skenirati nizovni literal.
Razumevanje pomena EOL
Preden rešimo problem, moramo učinkovito razumeti pomen EOL. EOL je okrajšava za 'End of Line'. Napaka EOL pomeni, da je tolmač Pythona dosegel konec vrstice med pregledovanjem dobesednega niza.
Nizovni literali, znani tudi kot konstante, morajo biti v enojnih ali dvojnih narekovajih. Če pri poskusu skeniranja dosežemo 'konec vrstice', pomeni, da smo dosegli zadnji znak niza in da nismo naleteli na končne narekovaje.
Oglejmo si osnovni primer, ki prikazuje, kako se pojavi napaka EOL.
primer:
# defining a string value my_string = 'This is my string literal, and it is broken... # printing the string value print('String:', my_string)
Izhod:
File 'D:Python ernarypy.py', line 2 my_string = 'This is my string literal, and it is broken... ^ SyntaxError: EOL while scanning string literal
Pojasnilo:
V zgornjem delčku kode smo definirali literal niza; vendar smo zgrešili narekovaj na koncu niza, kar je dvignilo sintaksna napaka med tiskanjem tega niza za uporabnike imenuje EOL.
V izhodnem delu lahko opazimo majhno puščico, ki kaže na zadnji znak niza, kar dokazuje, da je do napake prišlo, ko je program poskušal razčleniti ta segment stavka.
Zdaj, ko smo razumeli težavo, nam dovolite, da razumemo nekaj primerov, kjer se ta napaka lahko pojavi med izvajanjem kode python.
Popravljanje 'Sintaksne napake: EOL med pregledovanjem nizovnega literala.'
Na to napako lahko naletimo v štirih glavnih situacijah med delom v programu Python. Te štiri glavne situacije so prikazane spodaj:
- Manjka končni narekovaj
- Uporaba nepravilnega končnega narekovaja
- Konstantno raztezanje niza v več vrstic
- Uporaba poševnice nazaj pred končnim narekovajem
Začnimo razumeti vsako od teh situacij in jih poskusimo zaobiti.
Manjka končni narekovaj
Kot je bilo razloženo v prejšnjem delčku kode, tolmač Python sproži sintaktično napako vsakič, ko doseže konec dobesednega niza in odkrije, da manjka narekovaj.
primer:
# defining a string value my_string = 'This is my string literal, and it is broken... # printing the string value print('String:', my_string)
Pojasnilo:
Opazimo lahko, da manjka narekovaj na koncu dobesednega niza, kar prav tako opravičuje sintaktično napako. Vsak jezik ima nekaj temeljnih pravil glede sintakse, ki, če jih kršimo, povzročijo napake.
Razmislimo zdaj o naslednji sintaksi kot rešitvi zgornjega problema.
rešitev:
# defining a string value my_string = 'This is my string literal, and it is broken...' # printing the string value print('String:', my_string)
Izhod:
String: This is my string literal, and it is broken...
Pojasnilo:
V zgornjem delčku kode lahko opazimo, da smo na koncu dobesednega niza vključili narekovaj. Posledično se niz uspešno natisne za uporabnike, ne da bi pri tem prišlo do napake v sintaksi.
Uporaba nepravilnega končnega narekovaja
Lahko izkoristimo ' ' tako dobro, kot ' ' da bi v Python zaprli določeno konstanto niza. Vendar pa programer na koncu vrednosti niza pogosto uporabi nepravilen narekovaj. Takšna situacija povzroči, da program sproži sintaktično napako v smislu EOL.
Oglejmo si takšno situacijo na naslednjem primeru:
primer:
# 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)
Izhod:
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
Pojasnilo:
V zgornjem delčku kode smo na koncu vrednosti niza uporabili napačen narekovaj, kar povzroči sintaktično napako.
Takšni težavi se lahko izognemo z uporabo ustreznega narekovaja na koncu niza, kot je prikazano v naslednjem delčku kode.
rešitev:
# 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)
Izhod:
String: This is my string literal with wrong quotation mark at the end.
Pojasnilo:
Kot lahko opazimo, smo v zgornjem delčku kode uporabili ujemajoči se narekovaj na koncu niza, ki nam pomaga preprečiti napako EOL.
Konstantno raztezanje niza v več vrstic
Obstajajo različni programerji začetniki Python, ki delajo napako in raztezajo izjave v več kot eno vrstico. Python upošteva novo vrstico kot konec stavka, za razliko od drugih jezikov, kot sta C++ in Java, ki upoštevata ';' kot konec izjav.
Oglejmo si primer, ki prikazuje isto težavo.
Primer težave:
# defining a string value my_string = 'This is my string literal... this is my new line' # printing the string value print('String:', my_string)
Izhod:
File 'D:Python ernarypy.py', line 2 my_string = 'This is my string literal... ^ SyntaxError: EOL while scanning string literal
Pojasnilo:
arraylist in linkedlist
V zgornjem delčku kode lahko opazimo, da je koda morda videti navadna; vendar pa takoj, ko se začne naslednja vrstica, Pythonov tolmač konča ta stavek in sproži sintaktično napako, ker konstanta niza ni vključena.
Vendar lahko to težavo rešimo z različnimi metodami, kot je prikazano spodaj:
1. rešitev: uporaba ' ' za zagotovitev učinka nove vrstice na konstanto 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)
Izhod:
String: This is my string literal... this is my new line
Pojasnilo:
V zgornji delček kode smo vključili ' ' v konstanti niza, da zagotovite učinek nove vrstice. Kot rezultat, konstanta niza razdeli stavek v več vrstic.
Zdaj pa razmislimo o drugi rešitvi.
2. rešitev: uporaba trojnih narekovajev, ''' ali ''' za shranjevanje večvrstičnih nizovnih konstant
# defining a string value my_string = '''This is my string literal... this is my new line''' # printing the string value print('String:', my_string)
Izhod:
String: This is my string literal... this is my new line
Pojasnilo:
V zgornjem delčku kode smo uporabili trojni narekovaj, ''' za shranjevanje večvrstičnih nizovnih konstant.
Uporaba poševnice nazaj pred končnim narekovajem
Poševnica nazaj '' je odgovoren za ubežanje nizu in povzroči sintaktično napako.
Poglejmo naslednji primer.
primer:
# storing a directory path my_string = 'D:PythonMy_Folder' # printing the string value print('String:', my_string)
Izhod:
File 'D:Python ernarypy.py', line 2 my_string = 'D:PythonMy_Folder' ^ SyntaxError: EOL while scanning string literal
Pojasnilo:
V zgornjem delčku kode smo uporabili poševnico nazaj '' da ločite poti mape med seboj. Vendar pa je med izvajanjem programa tolmač Python sprožil sintaktično napako.
Zadnja poševnica nazaj pred narekovajem zapusti konstanto niza in tolmač Python upošteva ' kot en lik. To ubežno zaporedje se prevede v narekovaj (') .
To težavo lahko rešimo z naslednjim delčkom kode.
rešitev:
# storing a directory path my_string = 'D:\Python\My_Folder\' # printing the string value print('String:', my_string)
Izhod:
String: D:PythonMy_Folder
Pojasnilo:
V zgornjem delčku kode smo uporabili '\' v konstanti niza. Posledično tolmač Python izvede ta niz, ne da bi sprožil napako.