Kā mēs zinām, ka programmēšanas valoda, piemēram, Python, ir interpretēta valoda, kas būtībā nozīmē, ka katrs koda bloks vai rindiņa tiek apstrādāta pēc kārtas, nevis mainīta visa programma uz zema līmeņa kodu.
Ikreiz, kad Python tulks skenē koda rindiņu un pamana kaut ko neparastu, tas rada kļūdu, kas pazīstama kā sintakses kļūda. Parasti kļūdas ir radušās, ja trūkst iekavas, trūkst beigu pēdiņas un citas būtiskas sintakses anomālijas.
Nākamajā apmācībā mēs atklāsim vienu no Python sintakses kļūdām, kas pazīstamas kā EOL un kas parasti rodas, mēģinot skenēt virknes burtu.
Izpratne par EOL nozīmi
Pirms problēmas risināšanas mums ir efektīvi jāsaprot EOL nozīme. EOL ir saīsinājums no 'End of Line'. EOL kļūda nozīmē, ka Python tulks sasniedza rindas beigas, skenējot virknes burtu.
Virknes literāļi, kas pazīstami arī kā konstantes, jāiekļauj vienpēdiņās vai dubultpēdiņās. Ja, mēģinot skenēt, tiek sasniegta rindas beigas, tas nozīmē, ka esam sasnieguši virknes pēdējo rakstzīmi un neesam saskārušies ar beigu pēdiņām.
Apskatīsim pamata piemēru, kas parāda, kā tiek parādīta EOL kļūda.
Piemērs:
# defining a string value my_string = 'This is my string literal, and it is broken... # printing the string value print('String:', my_string)
Izvade:
File 'D:Python ernarypy.py', line 2 my_string = 'This is my string literal, and it is broken... ^ SyntaxError: EOL while scanning string literal
Paskaidrojums:
Iepriekš minētajā koda fragmentā esam definējuši virknes literālu; tomēr mēs esam palaiduši garām pēdiņu virknes beigās, kas paaugstināja sintakses kļūda ko sauc par EOL, drukājot šo virkni lietotājiem.
Izvades sadaļā mēs varam novērot nelielu bultiņu, kas norāda uz virknes pēdējo rakstzīmi, parādot, ka kļūda radās, kad programma mēģināja parsēt šo priekšraksta segmentu.
Tagad, kad esam sapratuši problēmu, ļaujiet mums saprast dažus gadījumus, kad šī kļūda var parādīties, izpildot python kodu.
Sintakses kļūdas labošana: EOL, skenējot virkni burtiski.
Mēs varam saskarties ar šo kļūdu četrās galvenajās situācijās, strādājot ar Python programmu. Šīs četras galvenās situācijas ir šādas:
- Trūkst beigu pēdiņas
- Izmantojot nepareizu beigu pēdiņu
- Virknes pastāvīga stiepšanās līdz vairākām līnijām
- Atgrieztās slīpsvītras izmantošana pirms beigu pēdiņas
Sāksim izprast katru no šīm situācijām un mēģināt tās apiet.
Trūkst beigu pēdiņas
Kā minēts iepriekšējā koda fragmentā, Python tulks rada sintakses kļūdu ikreiz, kad tas sasniedz virknes burta beigas un atklāj, ka pēdiņas nav.
Piemērs:
# defining a string value my_string = 'This is my string literal, and it is broken... # printing the string value print('String:', my_string)
Paskaidrojums:
Varam novērot, ka burtiskās virknes beigās trūkst pēdiņas, kas arī attaisno sintakses kļūdu. Katrai valodai ir daži pamatnoteikumi attiecībā uz sintaksi, kuru pārkāpšanas gadījumā rodas kļūdas.
Tagad aplūkosim šādu sintaksi kā iepriekš minētās problēmas risinājumu.
Risinājums:
# defining a string value my_string = 'This is my string literal, and it is broken...' # printing the string value print('String:', my_string)
Izvade:
String: This is my string literal, and it is broken...
Paskaidrojums:
Iepriekš minētajā koda fragmentā mēs varam novērot, ka burtiskās virknes beigās esam iekļāvuši pēdiņu. Rezultātā virkne lietotājiem tiek veiksmīgi izdrukāta, neradot sintakses kļūdu.
Izmantojot nepareizu beigu pēdiņu
Mēs varam izmantot '' kā arī '' lai Python ietvertu noteiktu virknes konstanti. Tomēr programmētājs virknes vērtības beigās bieži izmanto nepareizu pēdiņu. Šādas situācijas dēļ programma rada sintakses kļūdu EOL ziņā.
Apskatīsim šādu situāciju šādā piemērā:
Piemērs:
# 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)
Izvade:
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
Paskaidrojums:
Iepriekš minētajā koda fragmentā mēs esam izmantojuši nepareizu pēdiņu virknes vērtības beigās, kas rada sintakses kļūdu.
Mēs varam izvairīties no šādas problēmas, izmantojot atbilstošo pēdiņu virknes beigās, kā parādīts nākamajā koda fragmentā.
Risinājums:
# 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)
Izvade:
String: This is my string literal with wrong quotation mark at the end.
Paskaidrojums:
Iepriekš minētajā koda fragmentā, kā mēs varam novērot, esam izmantojuši atbilstošo pēdiņu virknes beigās, kas palīdz mums izvairīties no jebkādām EOL kļūdām.
Virknes pastāvīga stiepšanās līdz vairākām līnijām
Ir dažādi iesācēju Python programmētāji, kuri pieļauj kļūdu, izstiepjot paziņojumus vairāk nekā vienā rindā. Python ņem vērā jaunu rindiņu kā priekšraksta beigas, atšķirībā no citām valodām, piemēram, C++ un Java, kas uzskata ';' kā apgalvojumu beigas.
Apskatīsim piemēru, kas parāda to pašu problēmu.
Problēmas piemērs:
# defining a string value my_string = 'This is my string literal... this is my new line' # printing the string value print('String:', my_string)
Izvade:
File 'D:Python ernarypy.py', line 2 my_string = 'This is my string literal... ^ SyntaxError: EOL while scanning string literal
Paskaidrojums:
atšķirība starp bināro koku un bināro meklēšanas koku
Iepriekš minētajā koda fragmentā mēs varam novērot, ka kods var izskatīties parasts; tomēr, tiklīdz tiek sākta nākamā rinda, Python tulks izbeidz šo paziņojumu, radot sintakses kļūdu, jo nav iekļauta virknes konstante.
Tomēr mēs varam atrisināt šo problēmu, izmantojot dažādas metodes, kā parādīts zemāk:
1. risinājums: izmantojiet ' ', lai nodrošinātu jaunas rindas efektu virknes konstantei
# defining a string value my_string = 'This is my string literal... this is my new line' # printing the string value print('String:', my_string)
Izvade:
String: This is my string literal... this is my new line
Paskaidrojums:
Iepriekš minētajā koda fragmentā esam iekļāvuši ' ' virknes konstantē, lai nodrošinātu tai jaunas rindas efektu. Rezultātā virknes konstante sadala paziņojumu vairākās rindās.
Tagad apsvērsim citu risinājumu.
2. risinājums: izmantojiet trīs pēdiņas, '''' vai '''', lai saglabātu vairāku rindu virknes konstantes
# defining a string value my_string = '''This is my string literal... this is my new line''' # printing the string value print('String:', my_string)
Izvade:
String: This is my string literal... this is my new line
Paskaidrojums:
Iepriekš minētajā koda fragmentā esam izmantojuši trīskāršu pēdiņu, '''' lai saglabātu vairāku rindu virkņu konstantes.
Atgrieztās slīpsvītras izmantošana pirms beigu pēdiņas
Slīpsvītra '' ir atbildīgs par virknes aizbēgšanu un izraisa sintakses kļūdu.
Apskatīsim šādu piemēru.
Piemērs:
# storing a directory path my_string = 'D:PythonMy_Folder' # printing the string value print('String:', my_string)
Izvade:
File 'D:Python ernarypy.py', line 2 my_string = 'D:PythonMy_Folder' ^ SyntaxError: EOL while scanning string literal
Paskaidrojums:
Iepriekš minētajā koda fragmentā mēs esam izmantojuši slīpsvītru '' lai atdalītu mapes ceļus vienu no otra. Tomēr programmas izpildes laikā Python tulks izvirzīja sintakses kļūdu.
Pēdējā atpakaļvērstā slīpsvītra pirms pēdiņas iziet no virknes konstantes, un Python tulks ņem vērā ' kā viena rakstzīme. Šī aizbēgšanas secība nozīmē pēdiņas (') .
Mēs varam atrisināt šo problēmu, izmantojot šādu koda fragmentu.
Risinājums:
# storing a directory path my_string = 'D:\Python\My_Folder\' # printing the string value print('String:', my_string)
Izvade:
String: D:PythonMy_Folder
Paskaidrojums:
Iepriekš minētajā koda fragmentā mēs esam izmantojuši '\' virknes konstantē. Rezultātā Python tulks izpilda šo virkni, neradot kļūdu.