Mint tudjuk, egy olyan programozási nyelv, mint a Python, egy értelmezett nyelv, ami lényegében azt jelenti, hogy minden blokkot vagy kódsort egymás után dolgoznak fel, ahelyett, hogy az egész programot egy alacsony szintű kódra cserélnék.
Amikor a Python értelmezője átvizsgál egy kódsort, és valami rendkívüli dolgot észlel, akkor egy szintaktikai hibaként ismert hibát vet fel. Általában a hiányzó zárójel, a hiányzó záró idézet és a szintaxis egyéb alapvető anomáliái okozzák a hibákat.
A következő oktatóanyagban a Python egyik EOL-ként ismert szintaktikai hibáját fogjuk felfedezni, amely általában akkor jelenik meg, amikor egy karakterlánc-literált próbálunk megvizsgálni.
Az EOL jelentésének megértése
A probléma megoldása előtt hatékonyan meg kell értenünk az EOL jelentését. Az EOL az „End of Line” rövidítése. Az EOL hiba azt jelzi, hogy a Python interpreter a sor végére ért a karakterlánc-literál vizsgálata közben.
A karakterlánc-literálokat, más néven konstansokat egyszeres vagy kettős idézőjelbe kell tenni. A „Sorvég” elérése, amikor megpróbáljuk a keresést, azt jelenti, hogy elértük a karakterlánc utolsó karakterét, és nem találkoztunk a befejező idézőjelekkel.
Tekintsünk egy alappéldát, amely bemutatja az EOL hiba felvetését.
Példa:
# defining a string value my_string = 'This is my string literal, and it is broken... # printing the string value print('String:', my_string)
Kimenet:
File 'D:Python ernarypy.py', line 2 my_string = 'This is my string literal, and it is broken... ^ SyntaxError: EOL while scanning string literal
Magyarázat:
A fenti kódrészletben definiáltunk egy string literált; azonban kihagytunk egy idézőjelet a karakterlánc végéről, ami megemelte a szintaktikai hiba EOL-t hívott, miközben kinyomtatta ezt a karakterláncot a felhasználók számára.
A kimeneti részben egy kis nyíl látható, amely a karakterlánc utolsó karakterére mutat, jelezve, hogy a hiba akkor történt, amikor a program megpróbálta elemezni az utasítás adott szegmensét.
Most, hogy megértettük a problémát, ismerjük meg néhány olyan esetet, amikor ez a hiba python-kód futtatása közben jelentkezhet.
A 'Syntax Error: EOL string literal vizsgálata közben' hiba javítása.
Négy fő helyzetben találkozhatunk ezzel a hibával, miközben Python programon dolgozunk. Ez a négy fő helyzet az alábbiak szerint látható:
- Hiányzik a záró idézőjel
- Helytelen záró idézőjel használata
- Húrok folyamatos nyújtása több sorra
- Fordított perjel használata a záró idézőjel előtt
Kezdjük el megérteni ezeket a helyzeteket, és próbáljuk megkerülni őket.
Hiányzik a záró idézőjel
Amint azt az előző kódrészletben tárgyaltuk, a Python értelmező szintaktikai hibát jelez, amikor eléri a karakterlánc-literál végét, és felfedezi, hogy hiányzik az idézőjel.
Példa:
# defining a string value my_string = 'This is my string literal, and it is broken... # printing the string value print('String:', my_string)
Magyarázat:
Megfigyelhetjük, hogy hiányzik az idézőjel a literális karakterlánc végén, ami szintén indokolja a szintaktikai hibát. Minden nyelvnek van néhány alapvető szintaktikai szabálya, amelyek megszegése hibákhoz vezet.
Tekintsük most a következő szintaxist a fenti probléma megoldásának.
Megoldás:
# defining a string value my_string = 'This is my string literal, and it is broken...' # printing the string value print('String:', my_string)
Kimenet:
String: This is my string literal, and it is broken...
Magyarázat:
A fenti kódrészletben megfigyelhetjük, hogy a literális karakterlánc végére idézőjelet tettünk. Ennek eredményeként a karakterláncot a rendszer sikeresen kinyomtatja a felhasználók számára anélkül, hogy szintaktikai hiba lépne fel.
Helytelen záró idézőjel használata
Ki tudjuk használni '' szintén '' annak érdekében, hogy egy bizonyos karakterlánc-állandót bezárjon a Pythonba. A programozó azonban gyakran hibás idézőjelet használ a karakterlánc értékének végén. Ilyen helyzet miatt a program szintaktikai hibát vet fel az EOL szempontjából.
Tekintsünk egy ilyen helyzetet a következő példában:
Példa:
# 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)
Kimenet:
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
Magyarázat:
A fenti kódrészletben hibás idézőjelet használtunk a karakterlánc-érték végén, ami szintaktikai hibát eredményez.
Ezt a problémát elkerülhetjük, ha a karakterlánc végén egyező idézőjelet használunk, ahogy az a következő kódrészletben is látható.
Megoldás:
# 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)
Kimenet:
String: This is my string literal with wrong quotation mark at the end.
Magyarázat:
A fenti kódrészletben, amint azt megfigyelhetjük, a karakterlánc végén található egyező idézőjelet használtuk, amely segít elkerülni az EOL-hibákat.
A karakterlánc folyamatos nyújtása több sorra
Különféle kezdő Python-programozók elkövetik azt a hibát, hogy egynél több sorra feszítik ki az utasításokat. A Python egy új sort vesz figyelembe az utasítás végén, ellentétben más nyelvekkel, mint például a C++ és a Java, amelyek figyelembe veszik ';' kijelentések végeként.
Vegyünk egy példát, amely ugyanezt a problémát mutatja be.
Példa a problémára:
# defining a string value my_string = 'This is my string literal... this is my new line' # printing the string value print('String:', my_string)
Kimenet:
File 'D:Python ernarypy.py', line 2 my_string = 'This is my string literal... ^ SyntaxError: EOL while scanning string literal
Magyarázat:
npm gyorsítótár-tisztítási erő
A fenti kódrészletben megfigyelhetjük, hogy a kód hétköznapinak tűnhet; azonban amint a következő sor elkezdődik, a Python értelmező véget vet az utasításnak, és szintaktikai hibát vet fel, mert nem tartalmazza a karakterlánc állandót.
Ezt a problémát azonban többféle módszerrel is megoldhatjuk, az alábbiak szerint:
1. megoldás: A ' ' segítségével biztosítsa egy új sor hatását a karakterlánc-állandóhoz
# defining a string value my_string = 'This is my string literal... this is my new line' # printing the string value print('String:', my_string)
Kimenet:
String: This is my string literal... this is my new line
Magyarázat:
A fenti kódrészletben a ' ' a karakterlánc állandóban, hogy egy új sor hatását biztosítsa számára. Ennek eredményeként a karakterlánc-konstans több sorra bontja az utasítást.
Most nézzünk meg egy másik megoldást.
2. megoldás: hármas idézőjel, '''' vagy '''' többsoros karakterlánc-állandók tárolására
# defining a string value my_string = '''This is my string literal... this is my new line''' # printing the string value print('String:', my_string)
Kimenet:
String: This is my string literal... this is my new line
Magyarázat:
A fenti kódrészletben a hármas idézőjelet használtuk, '''' többsoros karakterlánc-konstansok tárolására.
Fordított perjel használata a záró idézőjel előtt
A fordított perjel '' felelős a karakterlánc elkerüléséért, és szintaktikai hibát okoz.
Tekintsük a következő példát.
Példa:
# storing a directory path my_string = 'D:PythonMy_Folder' # printing the string value print('String:', my_string)
Kimenet:
File 'D:Python ernarypy.py', line 2 my_string = 'D:PythonMy_Folder' ^ SyntaxError: EOL while scanning string literal
Magyarázat:
A fenti kódrészletben fordított perjelet használtunk '' a mappa elérési útjainak egymástól való elkülönítése érdekében. A program végrehajtása során azonban a Python interpreter felvetette a szintaktikai hibát.
Az idézőjel előtti utolsó fordított perjel kihagyja a karakterlánc-állandót, és a Python értelmező figyelembe veszi ' egyetlen karakterként. Ez a escape szekvencia idézőjelnek felel meg (') .
Ezt a problémát a következő kódrészlet segítségével tudjuk megoldani.
Megoldás:
# storing a directory path my_string = 'D:\Python\My_Folder\' # printing the string value print('String:', my_string)
Kimenet:
String: D:PythonMy_Folder
Magyarázat:
A fenti kódrészletben a '\' a string állandóban. Ennek eredményeként a Python értelmező hibajelenség nélkül végrehajtja ezt a karakterláncot.