Loading...
Python

Կարող եք ձեր կոդը փորձարկել այստեղ

Python

Գլուխ 4. Սխալների և բացառությունների կառավարում

except և տարբեր տեսակի բացառությունների վարում

Ներկառուցված բացառությունների տեսակները
Վերոնշյալ օրինակում բոլոր բացառությունները, որոնք կարող են լինել կոդում, մշակվել են միանգամից: Այնուամենայնիվ, մենք կարող ենք նշել բացառության տեսակը, որը պետք է մշակվի՝ նշելով այն բառից հետո, բացառությամբ.
try: number = int(input("Number: ")) print("Number:", number) except ValueError: print("Exception") print("End program")
Այս դեպքում except բլոկը կարգավորում է միայն ValueError տեսակի բացառությունները , որոնք կարող են առաջանալ, երբ տողը թվի վերափոխելը ձախողվում է:
Python-ն ունի հետևյալ հիմնական բացառությունների տեսակները.
BaseException . հիմնական տեսակը բոլոր ներկառուցված բացառությունների համար
Exception հիմնական տեսակ, որը սովորաբար օգտագործվում է հատուկ բացառությունների տեսակներ ստեղծելու համար
ArithmeticError . բազային տեսակ՝ թվաբանական գործողություններ պարունակող բացառությունների համար (OverflowError, ZeroDivisionError, FloatingPointError):
BufferError . մի տեսակ բացառություն, որն արվում է, երբ բուֆերային գործողություն չի կարող կատարվել
LookupError . բազային տեսակ բացառությունների համար, որոնք տեղի են ունենում հավաքածուներ մուտք գործելիս՝ օգտագործելով անվավեր բանալի կամ ինդեքս (օրինակ՝ IndexError, KeyError)
Բոլոր հատուկ բացառությունների տեսակները ժառանգվում են այս դասերից: Python-ն ունի ներկառուցված բացառությունների բավականին մեծ ցուցակ: Այս ամբողջ ցանկը կարելի է գտնել փաստաթղթերում : Ես կթվարկեմ միայն ամենատարածվածներից մի քանիսը.
IndexError . բացառություն է արվում, եթե հավաքածուի տարր մուտք գործելիս ինդեքսը գտնվում է տիրույթից դուրս
KeyError .  տեղի է ունենում, եթե բառարանը չի պարունակում բանալի, որով բառարանի տարրը հասանելի է:
OverflowError . Առաջանում է, եթե թվաբանական գործողության արդյունքը չի կարող ներկայացվել ընթացիկ թվային տիպով (սովորաբար float):
RecursionError . տեղի է ունենում, եթե թույլատրված ռեկուրսիայի խորությունը գերազանցում է:
TypeError . Առաջանում է, եթե գործողություն կամ ֆունկցիա կիրառվում է անվավեր տեսակի արժեքի վրա:
ValueError . տեղի է ունենում, եթե գործողությունը կամ ֆունկցիան ստանում է ճիշտ տիպի օբյեկտ՝ սխալ արժեքով:
ZeroDivisionError : Առաջանում է զրոյի բաժանելիս:
NotImplementedError . բացառության տեսակ, որը ցույց է տալիս, որ դասի որոշ մեթոդներ չեն իրականացվել:
ModuleNotFoundError . տեղի է ունենում, երբ մոդուլը հնարավոր չէ գտնել, երբ այն ներմուծվում է հրահանգով import
OSError . բացառության մի տեսակ, որը բացվում է, երբ տեղի են ունենում համակարգի սխալներ (օրինակ, ֆայլը չի գտնվել, սկավառակի հիշողությունը լի է և այլն)
Եվ եթե իրավիճակն այնպիսին է, որ ծրագրում կարող են ստեղծվել տարբեր տեսակի բացառություններ, ապա մենք կարող ենք դրանք առանձին կարգավորել՝ օգտագործելով լրացուցիչ, բացի արտահայտություններից։ Եվ երբ բացառություն է առաջանում, Python-ը կփնտրի ճիշտ բացառությամբ բլոկը, որը կարգավորում է այդ տեսակի բացառությունները.
try: number1 = int(input("write first number: ")) number2 = int(input("write second number: ")) print("Result:", number1/number2) except ValueError: print("ValueError") except ZeroDivisionError: print("ZeroDivisionError") except BaseException: print("BaseException") print("End program")
Եթե տողը թվի փոխարկելու արդյունքում բացառություն է առաջանում, այն կկարգավորվի բլոկի կողմից except ValueError: Եթե երկրորդ թիվը հավասար է զրոյի, այսինքն՝ կա զրոյի բաժանում, ապա կառաջանա ZeroDivisionError բացառություն և այն կմշակվի բլոկի կողմից except ZeroDivisionError:
BaseException տեսակը ներկայացնում է ընդհանուր բացառություն, որի տակ են ընկնում բոլոր բացառությունները: Հետևաբար, այս դեպքում ցանկացած բացառություն, որը ValueError կամ ZeroDivisionError տիպի չէ, կմշակվի բլոկում except BaseException:
Այնուամենայնիվ, եթե ծրագիրը հանդիպի մի տեսակի բացառության, որի համար չկա համապատասխան, բացառությամբ բլոկի except, ծրագիրը չի կարողանա գտնել համապատասխանություն, բացառությամբ բլոկների, և բացառություն կանի: Օրինակ՝ հետևյալ դեպքում.
try: number1 = int(input("write first number: ")) number2 = int(input("write second number: ")) print("result:", number1/number2) except ZeroDivisionError: print("ZeroDivisionError") print("End program")
Սա նախատեսում է բլոկի միջոցով բաժանումը զրոյով մշակել except ZeroDivisionError: Այնուամենայնիվ, եթե օգտատերը թվի փոխարեն տողի մեջ մուտքագրում է ոչ փոխակերպվող թիվ, ապա բացառություն կստեղծվի ValueError տեսակի, որի համար բացառությամբ բլոկը համապատասխանող չկա: Եվ հետևաբար ծրագիրը աննորմալ կերպով կդադարեցնի իր կատարումը:
Python-ը թույլ է տալիս կարգավորել մի քանի տեսակի բացառություններ մեկում, բացառությամբ բլոկի: Այս դեպքում բացառությունների բոլոր տեսակները փոխանցվում են փակագծերում.
try: number1 = int(input("Write first number: ")) number2 = int(input("Write second number: ")) print("Result:", number1/number2) except (ZeroDivisionError, ValueError): print("ZeroDivisionError or ValueError") print("End program")
Բացառության տեղեկատվության ստացում
As օպերատորի միջոցով մենք կարող ենք բացառության մասին ամբողջ տեղեկատվությունը փոխանցել փոփոխականի, որն այնուհետև կարող է օգտագործվել բացառության բլոկում.
try: number = int(input("write number: ")) print("number:", number) except ValueError as e: print("ValueError", e) print("end program")

Մեկնաբանություն գրելու համար խնդրում ենք մուտք լինել