Jak víme, programovací jazyk, jako je Python, je interpretovaný jazyk, což v podstatě znamená, že každý blok nebo řádek kódu je zpracováván jeden po druhém, spíše než aby se celý program měnil na nízkoúrovňový kód.
Kdykoli interpret Pythonu naskenuje řádek kódu a všimne si něčeho neobvyklého, vyvolá chybu známou jako Syntax Error. Chybějící závorka, chybějící koncová uvozovka a další základní anomálie v syntaxi jsou obecně důvodem, proč byly chyby vyvolány.
V následujícím tutoriálu odhalíme jednu ze syntaktických chyb v Pythonu známou jako EOL, která se obvykle objeví, když se pokoušíme skenovat řetězcový literál.
Pochopení významu EOL
Před řešením problému musíme efektivně porozumět významu EOL. EOL je zkratka pro 'End of Line'. Chyba EOL znamená, že interpret jazyka Python dosáhl konce řádku při skenování řetězcového literálu.
Řetězcové literály, známé také jako konstanty, musí být uzavřeny v jednoduchých nebo dvojitých uvozovkách. Dosažení „konce řádku“ při pokusu o skenování znamená, že jsme dosáhli posledního znaku řetězce a nenarazili jsme na koncové uvozovky.
Podívejme se na základní příklad demonstrující, jak je vyvolána chyba EOL.
Pří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ýstup:
File 'D:Python ernarypy.py', line 2 my_string = 'This is my string literal, and it is broken... ^ SyntaxError: EOL while scanning string literal
Vysvětlení:
Ve výše uvedeném úryvku kódu jsme definovali řetězcový literál; na konci řetězce jsme však vynechali uvozovky, což zvýšilo znak chyba syntaxe zavolal EOL při tisku tohoto řetězce pro uživatele.
Ve výstupní části můžeme pozorovat malou šipku ukazující na poslední znak řetězce, což ukazuje, že k chybě došlo, když se program pokusil analyzovat daný segment příkazu.
Nyní, když jsme problému porozuměli, pochopme některé případy, kdy se tato chyba může objevit při provádění kódu pythonu.
Oprava 'Chyba syntaxe: EOL při skenování řetězcového literálu.'
S touto chybou se můžeme setkat ve čtyřech hlavních situacích při práci na programu Python. Tyto čtyři hlavní situace jsou uvedeny níže:
- Chybí koncová uvozovka
- Použití nesprávné koncové uvozovky
- Konstantní natahování řetězce na více řádků
- Použití zpětného lomítka před koncovou uvozovkou
Začněme chápat každou z těchto situací a pokusme se je obejít.
Chybí koncová uvozovka
Jak bylo uvedeno v předchozím úryvku kódu, interpret Pythonu vyvolá chybu syntaxe, kdykoli dosáhne konce řetězcového literálu a zjistí, že chybí uvozovka.
Příklad:
# defining a string value my_string = 'This is my string literal, and it is broken... # printing the string value print('String:', my_string)
Vysvětlení:
Můžeme pozorovat, že chybí uvozovka na konci doslovného řetězce, což také ospravedlňuje chybu syntaxe. Každý jazyk má několik základních pravidel týkajících se syntaxe, která při porušení vedou k chybám.
Zvažme nyní následující syntaxi jako řešení výše uvedeného problému.
Řešení:
# defining a string value my_string = 'This is my string literal, and it is broken...' # printing the string value print('String:', my_string)
Výstup:
String: This is my string literal, and it is broken...
Vysvětlení:
Ve výše uvedeném úryvku kódu můžeme pozorovat, že jsme na konec doslovného řetězce vložili uvozovku. Výsledkem je, že řetězec je pro uživatele vytištěn úspěšně, aniž by došlo k jakékoli syntaktické chybě.
Použití nesprávné koncové uvozovky
Můžeme využít ' ' jakož i ' ' za účelem uzavření určité řetězcové konstanty v Pythonu. Programátor však často používá nesprávné uvozovky na konci hodnoty řetězce. Taková situace způsobí, že program vyvolá chybu syntaxe z hlediska EOL.
Uvažujme takovou situaci v následujícím příkladu:
Pří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ýstup:
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
Vysvětlení:
Ve výše uvedeném úryvku kódu jsme použili nesprávné uvozovky na konci hodnoty řetězce, což vede k chybě syntaxe.
Takovému problému se můžeme vyhnout použitím odpovídajících uvozovek na konci řetězce, jak je znázorněno v následujícím úryvku kódu.
Řešení:
# 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ýstup:
String: This is my string literal with wrong quotation mark at the end.
Vysvětlení:
Jak můžeme pozorovat, ve výše uvedeném úryvku kódu jsme použili odpovídající uvozovky na konci řetězce, což nám pomáhá vyhnout se jakékoli chybě EOL.
Konstantní natahování řetězce na více řádků
Existují různí začínající programátoři Pythonu, kteří dělají tu chybu, že roztahují příkazy na více než jeden řádek. Python bere v úvahu nový řádek jako konec příkazu, na rozdíl od jiných jazyků, jako je C++ a Java, které berou v úvahu ';' jako konec prohlášení.
Podívejme se na příklad demonstrující stejný problém.
Pří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ýstup:
File 'D:Python ernarypy.py', line 2 my_string = 'This is my string literal... ^ SyntaxError: EOL while scanning string literal
Vysvětlení:
nejlepší úsměv na světě
Ve výše uvedeném úryvku kódu můžeme pozorovat, že kód může vypadat obyčejně; jakmile však začne další řádek, interpret Pythonu ukončí tento příkaz a vyvolá chybu syntaxe pro neuzavření řetězcové konstanty.
Tento problém však můžeme vyřešit pomocí různých metod, jak je uvedeno níže:
Řešení 1: Použití ' ' k poskytnutí efektu nového řádku na řetězcovou konstantu
# 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ýstup:
String: This is my string literal... this is my new line
Vysvětlení:
Ve výše uvedeném úryvku kódu jsme zahrnuli ' ' v řetězcové konstantě, aby na ni působil efekt nového řádku. V důsledku toho řetězcová konstanta rozdělí příkaz na více řádků.
Nyní uvažujme o jiném řešení.
Řešení 2: Použití trojitých uvozovek, ''' nebo ''' k uložení konstant víceřádkového řetězce
# 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ýstup:
String: This is my string literal... this is my new line
Vysvětlení:
Ve výše uvedeném úryvku kódu jsme použili trojité uvozovky, ''' za účelem uložení konstant víceřádkového řetězce.
Použití zpětného lomítka před koncovou uvozovkou
Zpětné lomítko '' je zodpovědný za escapování řetězce a způsobuje chybu syntaxe.
Uvažujme o následujícím příkladu.
Příklad:
# storing a directory path my_string = 'D:PythonMy_Folder' # printing the string value print('String:', my_string)
Výstup:
File 'D:Python ernarypy.py', line 2 my_string = 'D:PythonMy_Folder' ^ SyntaxError: EOL while scanning string literal
Vysvětlení:
Ve výše uvedeném úryvku kódu jsme použili zpětné lomítko '' za účelem oddělení cest složky od sebe. Během provádění programu však interpret Pythonu vyvolal chybu syntaxe.
Poslední zpětné lomítko před uvozovkou escapuje řetězcovou konstantu a interpret Pythonu bere v úvahu ' jako jediná postava. Tato sekvence escape se převádí do uvozovek (') .
Tento problém můžeme vyřešit pomocí následujícího fragmentu kódu.
Řešení:
# storing a directory path my_string = 'D:\Python\My_Folder\' # printing the string value print('String:', my_string)
Výstup:
String: D:PythonMy_Folder
Vysvětlení:
Ve výše uvedeném úryvku kódu jsme použili '\' v řetězcové konstantě. Výsledkem je, že interpret Pythonu provede tento řetězec bez vyvolání chyby.