Ako vieme, programovací jazyk ako Python je interpretovaný jazyk, čo v podstate znamená, že každý blok alebo riadok kódu sa spracuje jeden po druhom, namiesto toho, aby sa celý program zmenil na kód nízkej úrovne.
Kedykoľvek interpret Pythonu naskenuje riadok kódu a všimne si niečo výnimočné, vyvolá chybu známu ako chyba syntaxe. Vo všeobecnosti sú chyby spôsobené chýbajúcou zátvorkou, chýbajúcou koncovou úvodzovkou a inými základnými anomáliami v syntaxi.
V nasledujúcom návode objavíme jednu zo syntaktických chýb v Pythone, známych ako EOL, ktorá sa zvyčajne objaví, keď sa pokúšame skenovať reťazcový literál.
Pochopenie významu EOL
Pred riešením problému musíme efektívne pochopiť význam EOL. EOL je skratka pre 'End of Line'. Chyba EOL znamená, že interpret jazyka Python dosiahol koniec riadku pri skenovaní reťazcového literálu.
Reťazcové literály, známe aj ako konštanty, musia byť uzavreté v jednoduchých alebo dvojitých úvodzovkách. Dosiahnutie 'Koniec riadku' pri pokuse o skenovanie znamená, že sme dosiahli posledný znak reťazca a nenarazili sme na koncové úvodzovky.
Uvažujme o základnom príklade, ktorý demonštruje, ako vzniká chyba EOL.
Príklad:
# defining a string value my_string = 'This is my string literal, and it is broken... # printing the string value print('String:', my_string)
Výkon:
File 'D:Python ernarypy.py', line 2 my_string = 'This is my string literal, and it is broken... ^ SyntaxError: EOL while scanning string literal
Vysvetlenie:
Vo vyššie uvedenom úryvku kódu sme definovali reťazcový literál; na konci reťazca sme však vynechali úvodzovky, ktoré zvýšili reťazec chyba syntaxe pri tlači tohto reťazca pre používateľov.
Vo výstupnej časti môžeme pozorovať malú šípku ukazujúcu na posledný znak reťazca, čo dokazuje, že chyba nastala, keď sa program pokúsil analyzovať daný segment príkazu.
Teraz, keď sme pochopili problém, pochopme niektoré prípady, keď sa táto chyba môže objaviť pri vykonávaní kódu python.
Oprava 'Chyba syntaxe: EOL pri skenovaní reťazcového literálu.'
S touto chybou sa môžeme stretnúť v štyroch hlavných situáciách pri práci na programe Python. Tieto štyri hlavné situácie sú uvedené nižšie:
- Chýba koncová úvodzovka
- Použitie nesprávnych koncových úvodzoviek
- Konštantné naťahovanie reťazcov do viacerých riadkov
- Použitie spätnej lomky pred koncovou úvodzovkou
Začnime chápať každú z týchto situácií a pokúsme sa ich obísť.
Chýba koncová úvodzovka
Ako je uvedené v predchádzajúcom úryvku kódu, interpret Pythonu vyvolá chybu syntaxe vždy, keď dosiahne koniec reťazcového literálu a zistí, že chýba úvodzovka.
Príklad:
# defining a string value my_string = 'This is my string literal, and it is broken... # printing the string value print('String:', my_string)
Vysvetlenie:
Môžeme pozorovať, že úvodzovka na konci doslovného reťazca chýba, čo tiež odôvodňuje chybu syntaxe. Každý jazyk má niekoľko základných pravidiel týkajúcich sa syntaxe, ktorých porušenie má za následok chyby.
Uvažujme teraz nasledujúcu syntax ako riešenie vyššie uvedeného problému.
Riešenie:
# defining a string value my_string = 'This is my string literal, and it is broken...' # printing the string value print('String:', my_string)
Výkon:
String: This is my string literal, and it is broken...
Vysvetlenie:
Vo vyššie uvedenom úryvku kódu môžeme pozorovať, že sme na koniec doslovného reťazca zahrnuli úvodzovky. Výsledkom je, že sa reťazec vytlačí pre používateľov úspešne bez vyvolania akejkoľvek chyby syntaxe.
Použitie nesprávnych koncových úvodzoviek
Môžeme využiť ' ' ako aj ' ' aby sme v Pythone uzavreli určitú reťazcovú konštantu. Programátor však často používa nesprávne úvodzovky na konci hodnoty reťazca. Takáto situácia spôsobí, že program vyvolá chybu syntaxe z hľadiska EOL.
Uvažujme o takejto situácii v nasledujúcom príklade:
Príklad:
# 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)
Výkon:
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
Vysvetlenie:
Vo vyššie uvedenom úryvku kódu sme použili nesprávne úvodzovky na konci hodnoty reťazca, čo vedie k chybe syntaxe.
Takýmto problémom sa môžeme vyhnúť použitím zodpovedajúcej úvodzovky na konci reťazca, ako je znázornené v nasledujúcom úryvku kódu.
Riešenie:
# 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)
Výkon:
String: This is my string literal with wrong quotation mark at the end.
Vysvetlenie:
Vo vyššie uvedenom úryvku kódu, ako môžeme pozorovať, sme použili zodpovedajúce úvodzovky na konci reťazca, čo nám pomáha vyhnúť sa akejkoľvek chybe EOL.
Konštantné naťahovanie reťazcov do viacerých riadkov
Existujú rôzni začínajúci programátori Pythonu, ktorí robia tú chybu, že rozťahujú príkazy na viac ako jeden riadok. Python berie do úvahy nový riadok ako koniec príkazu, na rozdiel od iných jazykov ako C++ a Java, ktoré berú do úvahy ';' ako koniec vyhlásení.
Pozrime sa na príklad, ktorý demonštruje rovnaký problém.
Príklad problému:
# defining a string value my_string = 'This is my string literal... this is my new line' # printing the string value print('String:', my_string)
Výkon:
File 'D:Python ernarypy.py', line 2 my_string = 'This is my string literal... ^ SyntaxError: EOL while scanning string literal
Vysvetlenie:
apurva padgaonkar
Vo vyššie uvedenom úryvku kódu môžeme pozorovať, že kód môže vyzerať obyčajne; avšak hneď ako sa začne ďalší riadok, tlmočník Pythonu ukončí tento príkaz a vyvolá chybu syntaxe pre neuzavretie reťazcovej konštanty.
Tento problém však môžeme vyriešiť rôznymi spôsobmi, ako je uvedené nižšie:
Riešenie 1: Použitie ' ' na poskytnutie efektu nového riadku na reťazcovú konštantu
# defining a string value my_string = 'This is my string literal... this is my new line' # printing the string value print('String:', my_string)
Výkon:
String: This is my string literal... this is my new line
Vysvetlenie:
Vo vyššie uvedenom úryvku kódu sme zahrnuli ' ' v reťazcovej konštante, aby sa dosiahol efekt nového riadku. Výsledkom je, že reťazcová konštanta rozdelí príkaz do viacerých riadkov.
Teraz zvážme iné riešenie.
Riešenie 2: Použitie trojitých úvodzoviek, ''' alebo ''' na uloženie konštánt viacriadkového reťazca
# defining a string value my_string = '''This is my string literal... this is my new line''' # printing the string value print('String:', my_string)
Výkon:
String: This is my string literal... this is my new line
Vysvetlenie:
Vo vyššie uvedenom úryvku kódu sme použili trojité úvodzovky, ''' aby sa uložili viacriadkové reťazcové konštanty.
Použitie spätnej lomky pred koncovou úvodzovkou
Opačná lomka '' je zodpovedný za escapovanie reťazca a spôsobuje chybu syntaxe.
Uvažujme o nasledujúcom príklade.
Príklad:
# storing a directory path my_string = 'D:PythonMy_Folder' # printing the string value print('String:', my_string)
Výkon:
File 'D:Python ernarypy.py', line 2 my_string = 'D:PythonMy_Folder' ^ SyntaxError: EOL while scanning string literal
Vysvetlenie:
Vo vyššie uvedenom úryvku kódu sme použili spätné lomítko '' s cieľom oddeliť cesty priečinka od seba. Počas vykonávania programu však interpret Pythonu vyvolal chybu syntaxe.
Posledná spätná lomka pred úvodzovkou uniká reťazcovej konštante a interpret Pythonu to zvažuje ' ako jedna postava. Táto sekvencia escape sa prekladá do úvodzoviek (') .
Tento problém môžeme vyriešiť pomocou nasledujúceho útržku kódu.
Riešenie:
# storing a directory path my_string = 'D:\Python\My_Folder\' # printing the string value print('String:', my_string)
Výkon:
String: D:PythonMy_Folder
Vysvetlenie:
Vo vyššie uvedenom úryvku kódu sme použili '\' v reťazcovej konštante. Výsledkom je, že interpret Pythonu vykoná tento reťazec bez toho, aby vyvolal chybu.