Սխալի հաղորդագրությունից կարելի է հասկանալ, թե որտեղ է ծրագիրը կանգնել ու ինչ խնդիր է նկատել Python-ը։ Այս դասում մի քանի սխալ կանենք դիտմամբ, հետո կուղղենք դրանք։

 

Ինչ կսովորես

Կհետևես, թե ինչ հերթականությամբ են կատարվում հրահանգները, ու կտարբերես SyntaxError-ը, runtime error-ը և սխալ արդյունքը։ Կսովորես նաև սխալի հաղորդագրությունից գտնել ֆայլը, տողն ու խնդրի տեսակը և մեկնաբանություններ գրել։

 

Հրահանգների հերթականությունը

Ստեղծիր order.py ֆայլ՝

print("Սկիզբ")
print(10 + 5)
print("Ավարտ")

Արդյունքը՝

Սկիզբ
15
Ավարտ

Այս պարզ ծրագրում տողերը կատարվում են վերևից ներքև։ Առաջին ու վերջին տողերի տեղերը փոխիր և նորից գործարկիր։

 

SyntaxError․ Python-ը չի կարող կարդալ կոդը

Այս օրինակում սխալը դիտմամբ ենք թողել՝ երկրորդ տողում փակագիծը բաց է մնացել։

print("Սկիզբ")
print("Բարև"
print("Ավարտ")

Python-ը հայտնում է SyntaxError։ Ամբողջ script-ը գործարկելուց առաջ Python-ը ստուգում է կոդի կառուցվածքը։ Դրա համար էլ այստեղ նույնիսկ առաջին տողը չի տպվի։

python3 order.py-ը տալիս է SyntaxError՝ ^ ցուցիչով 2-րդ տողի բաց փակագծի տակ, և ոչ մի տող չի տպվում

Linux terminal, Python 3.13։ Սկիզբ-ը չի տպվել, իսկ ^ ցուցիչը ցույց է տալիս 2-րդ տողի բաց մնացած փակագիծը։ Քո Python-ի տարբերակում հաղորդագրությունը կարող է այլ ձևով գրված լինել։

Ուղղիր երկրորդ տողը՝

print("Բարև")

Python-ի տարբեր տարբերակներում հաղորդագրության ձևակերպումն ու ցուցիչի տեղը կարող են տարբեր լինել։ Նայիր նաև նշված տողից առաջ եղած տողը։ Բաց մնացած չակերտը կամ փակագիծը կարող է հենց այնտեղ լինել։

 

NameError․ անունը չի գտնվել

Ահա ևս մի դիտմամբ արված սխալ՝

print("Սկիզբ")
pritn("Բարև")
print("Ավարտ")

Այստեղ նախ կտեսնես Սկիզբ-ը, հետո՝ NameError։ Python-ը փնտրում է pritn անունը, բայց ճիշտ անունը print է։

Սա runtime error է, այսինքն սխալ, որն առաջանում է ծրագրի կատարման ընթացքում։ Այստեղ սխալը չենք մշակում, դրա համար հաջորդ տողը չի կատարվում, ու Ավարտ-ը չի տպվում։

python3 order.py-ը տպում է Սկիզբ, հետո 2-րդ տողում կանգնում է NameError-ով pritn անվան պատճառով

Linux terminal, Python 3.13։ Նախ տպվել է Սկիզբ-ը, հետո ծրագիրը կանգնել է 2-րդ տողում, ու Ավարտ-ը չի տպվել։ Նոր տարբերակներում վերջին տողում Python-ը հուշում է նաև ճիշտ անունը՝ print։

Սխալներ մշակել կսովորենք առանձին մոդուլում։ Այստեղ ուղղումը պարզ է՝ pritn-ը դարձրու print։

Դիագրամում երևում է, թե ինչու SyntaxError-ի դեպքում ոչինչ չի տպվում, իսկ NameError-ի դեպքում առաջին տողը տպվում է։

flowchart TD
  A["Գործարկում ենք order.py-ը"] --> B{"Կոդի կառուցվածքը ճի՞շտ է"}
  B -->|Ոչ| C["SyntaxError՝ ոչ մի տող չի կատարվում"]
  B -->|Այո| D["Տող 1՝ տպվում է Սկիզբ"]
  D --> E["Տող 2՝ pritn անունը չի գտնվում"]
  E --> F["NameError՝ տող 3-ը չի կատարվում"]

 

Ինչպես կարդալ traceback-ը

Վերևի օրինակում կարող ես տեսնել այսպիսի հաղորդագրություն՝

Traceback (most recent call last):
  File "order.py", line 2, in <module>
    pritn("Բարև")
NameError: name 'pritn' is not defined

Սա ընդամենը օրինակ է։ Քո մոտ ամբողջ ուղին կամ լրացուցիչ հուշումը կարող են տարբեր լինել։

Սկսիր վերջին տողից՝ NameError։ Հետո նայիր մյուս մասերին՝

Մաս

Ինչ է ասում

order.py

Որ ֆայլում է խնդիրը

line 2

Որ տողն է կատարվել

pritn("Բարև")

Որ հրահանգից է առաջացել սխալը

NameError

Ինչ տեսակի խնդիր է եղել

 

Ծրագիրն աշխատում է, բայց արդյունքը սխալ է

Պատկերացրու, որ պետք է գումարես 1500 և 500 դրամ ծախսերը, բայց գրել ես՝

print(1500 - 500)

Python-ը կտպի 1000։ Սխալի հաղորդագրություն չի լինի, որովհետև հանումը թույլատրելի գործողություն է։ Բայց մեր խնդրի ճիշտ պատասխանը 2000 է։

Սա տրամաբանական սխալ է։ Նման սխալը գտնելու համար արդյունքը պետք է համեմատես խնդրի պահանջի հետ։

 

Ինչ հերթականությամբ ստուգել

flowchart TD
  A["Գործարկիր պահպանված ֆայլը"] --> B{"Error կա՞"}
  B -->|Այո| C["Կարդա տեսակը և նշված տողը"]
  B -->|Ոչ| D{"Արդյունքը սպասվա՞ծն է"}
  C --> E["Ուղղիր կոդը և պահպանիր"]
  D -->|Ոչ| F["Համեմատիր հաշվարկը պահանջի հետ"]
  F --> E
  E --> A
  D -->|Այո| G["Փորձիր նաև այլ տվյալներով"]

Ամեն անգամ փոխիր մեկ բան, պահպանիր ու նորից գործարկիր։ Այդպես ավելի հեշտ է հասկանալ, թե որ փոփոխությունն օգնեց։

 

Մեկնաբանություններ

Եթե # նշանը տեքստային արժեքից դուրս է, դրանից մինչև տողի վերջը մեկնաբանություն է։ Python-ը այդ մասը չի կատարում։ Չակերտների մեջ #-ը սովորական նիշ է, օրինակ՝ print("#Python")-ը տպում է #Python։

# Գումարները նշված են դրամներով։
print(1500 + 500)

Արդյունքը՝ 2000։

Մեկնաբանությունն օգտակար է, երբ բացատրում է նպատակը կամ կարևոր պայմանը։ Եթե կոդն առանց այդ էլ պարզ է, պետք չէ այն մեկնաբանության մեջ բառացի կրկնել։

 

Ինքնուրույն առաջադրանք

Ծրագիրը պետք է տպի Ընդհանուր ծախս, հետո 2000, հետո Ավարտ։

Այս կոդում երեք խնդիր կա։ Գտիր ու հերթով ուղղիր դրանք՝

print("Ընդհանուր ծախս")
print(1500 - 500
pritn("Ավարտ")

Հուշում 1․ ստուգիր փակագծերը։

Հուշում 2․ համեմատիր ֆունկցիաների անունները։

Հուշում 3․ պահանջը գումարելն է։

 

Լուծում

print("Ընդհանուր ծախս")
print(1500 + 500)
print("Ավարտ")

Արդյունքը՝

Ընդհանուր ծախս
2000
Ավարտ
Առաջադրանքի ծրագիրը չորս գործարկումով՝ SyntaxError, NameError, սխալ 1000 արդյունք և վերջում ճիշտ 2000

Ուղղումները հերթով՝ Linux terminal-ում։ Նախ տեսնում ենք SyntaxError, փակագիծը փակելուց հետո՝ NameError։ Հետո ստանում ենք սխալ 1000՝ առանց սխալի հաղորդագրության, ու վերջում ճիշտ 2000։ Ամեն ուղղումից հետո ֆայլը պահպանվել ու նորից գործարկվել է։

Ավարտի չափանիշ․ կարող ես բացատրել երեք ուղղումն էլ։ Հետո 500-ը դարձրու 700 ու համոզվիր, որ արդյունքը 2200 է։

 

Ստուգիր քեզ

  1. Runtime error-ից առաջ եղած տողերը կարո՞ղ են արդեն կատարված լինել։

  2. Եթե սխալի հաղորդագրություն չկա, նշանակո՞ւմ է, որ լուծումը ճիշտ է։

  3. Ինչի՞ համար է # նշանը։

Պատասխաններ․ 1. Այո։ 2. Ոչ, պետք է ստուգել արդյունքը։ 3. Մեկնաբանություն գրելու համար։

Առաջին մոդուլն ավարտեցիր։ Անցիր «Հարցեր» բաժնին, իսկ հետո կսկսենք աշխատել փոփոխականների հետ։