Өзгөчө кырдаалдар тереңинен
Каталарды башкарылуучу жана калыбына келтирилүүчү окуяларга айландырыңыз
Негизги идея: өзгөчө кырдаал (exception) — бул Python бир нерсе туура эмес болгонун чакыруу стеги боюнча жогору көтөрүлүүчү маани катары билдирүү ыкмасы. Ката коддорун кайтарып, аларды кол менен текшергендин ордуна, сиз каталыкка кадимки жүрүшүн үзүүгө уруксат берип, анан аны кармап аласыз — так пайдалуу иш кыла ала турган жерде.
try/except менен башталгыч курста тааныштыңыз; бул жерде толук жашоо циклин үйрөнөсүз: try, except, else, finally, raise аркылуу катаны атайын чакыруу, өз өзгөчө кырдаал түрлөрүн долбоорлоо жана бир каталыкты экинчисине байлоо.
Аягында сиз буларды кыла аласыз:
- төрт блокту тең —
try,except,else,finally— колдонуп, ар биринин милдетин түшүндүрө аласыз, - өзгөчө кырдаалдын конкреттүү түрлөрүн кармай аласыз (жана бош
except:эмне үчүн тузак экенин билесиз), raiseаркылуу өзгөчө кырдаалдарды атайын чакыра аласыз, кайра чакырууну кошо,Exceptionдан мурас алуу менен өз өзгөчө кырдаалдарыңызды долбоорлой аласыз,- өзгөчө кырдаалдарды байлоо (
raise ... from ...) аркылуу баштапкы себепти сактай аласыз.
1. Толук анатомия: try / except / else / finally
Толук өзгөчө кырдаал иштеткич эң көбү төрт бөлүктөн турат. Милдеттүү болгону — try жана эң аз дегенде бир except (же finally); else менен finally милдеттүү эмес, бирок абдан пайдалуу.
try:
# 1. коркунучтуу иш
value = int(user_input)
except ValueError:
# 2. ТОЛЬКО try ичинде дал келген өзгөчө кырдаал чыкса иштейт
print("That was not a whole number.")
else:
# 3. ТОЛЬКО try өзгөчө кырдаалсыз бүткөндө иштейт
print("You entered", value)
finally:
# 4. ДАЙЫМА иштейт — ийгилик, каталык, атүгүл return болсо да
print("Done validating.")
Көпчүлүк адамдар байкабай кала турган негизги айырма — else менен жөн эле tryдын аягына код кошуунун ортосунда:
tryичинде каталыкка учурай турган саптар гана болушу керек. Аны кыска кармаңыз, ошондоexceptтак эмнени кармап жатканын билесиз.exceptбир түрдөгү каталыкты иштетет. Алар бир нечоо болушу мүмкүн, жогорудан төмөн текшерилет; биринчи дал келгени жеңет.else«баары иштеди» деген кийинки аракеттерди камтыйт. Алtryийгиликтүү болгондо гана иштегендиктен, бул жерде чыккан өзгөчө кырдаал жогорудагыexceptтарабынан кармалбайт — мунун бүт мааниси ушунда.finallyкандай жыйынтык болсо да аткарылышы керек болгон тазалоо үчүн: файлдарды жабуу, кулпуларды бошотуу, абалды калыбына келтирүү. Алtryичиненreturnкылсаңыз да иштейт.