Ծրագրեր գրելիս մենք հաճախ բախվում ենք իրավիճակների, երբ ծրագրի կատարման բնականոն ընթացքը պետք է փոխվի՝ որոշակի պայմանների պատճառով: Python-ը մեզ մեխանիզմներ է տրամադրում նման իրավիճակները բացառությունների միջոցով կարգավորելու համար: Բացառություններն այն դեպքերն են, որոնք կարող են փոփոխել ծրագրի միջոցով վերահսկողության ընթացքը: Python-ում ցանկացած պահի դուք կարող եք բացառություն կիրառել՝ օգտագործելով raise դրույթը:
Ահա raise դրույթն օգտագործելու պարզ օրինակ.
x = -1
if x < 0:
# raise an exception if x is negative
raise Exception('x should not be negative')
Այս ծրագրում, եթե x-ի արժեքը 0-ից փոքր է, Exception տիպի բացառություն է raise արվում՝ x should not be negative հաղորդագրությամբ։ Եթե աշխատացնեիք այս ծրագիրը, այն կկանգներ raise հայտարարությանը հանդիպելիս և ելքում կտպեր բացառության հաղորդագրությունը.
Exception: x should not be negative
Բացի Exception-ից, Python-ում կան մի քանի ներկառուցված բացառություններ, որոնք կարող եք օգտագործել՝ ավելի կոնկրետ տեսակի սխալներ raise անելու համար: Ահա թե ինչպես կարող եք raise անել ValueError-ը․
def sqrt(n):
if n < 0:
# raise a ValueError if n is negative
raise ValueError('Square root not defined for negative numbers')
return n ** 0.5
print(sqrt(4)) # 2.0
print(sqrt(-1)) # ValueError: Square root not defined for negative numbers
Այս օրինակում sqrt(n) ֆունկցիան փորձում է հաշվարկել n թվի քառակուսի արմատը։ Սակայն եթե n-ը բացասական է, այն raise է անում ValueError՝ հատուկ հաղորդագրությամբ:
Նկատի ունեցեք, որ երբ raise եք անում բացառություն, ծրագրի աշխատանքն ընդհատվում է: Սա կարևոր է, քանի որ մեզ ազդանշան է տալիս, որ անսպասելի մի բան է տեղի ունեցել, որը ծրագիրը չի կարող կարգավորել: Բացառության տեսակը և հաղորդագրությունը լրացուցիչ տեղեկություններ են տալիս սխալի մասին:
Առաջադրանք․ ֆայլերի ընթերցում
Ծրագրային ապահովման խոշոր ընկերության համակարգչի պանակում (directory) կան բազմաթիվ կոդային ֆայլեր: Ձեզանից պահանջվում է գրել Python ֆունկցիա, որը բացում է ֆայլը և վերադարձնում դրա բովանդակությունը: Բայց ֆունկցիան պետք է կարողանա կարգավորել այն դեպքերը, երբ ֆայլ գոյություն չունի:
Մուտքում տրված է ֆայլի անունը:
Ֆունկցիան պետք է կարդա և վերադարձնի ֆայլի բովանդակությունը: Եթե ֆայլը գոյություն չունի, այն պետք է raise անի FileNotFoundError: