Руковање Питхон грешкама: покушајте / осим / елсе / коначно 2026
Руковање грешкама одваја "код који ради на вашој машини" од "кода који преживи производњу". Питхон-ов „покушај / осим“ изгледа једноставно, али пун облик са четири кључне речи — „покушај / осим / елсе / коначно“ — кодира изненађујућу количину структуре коју већина туторијала прескаче.
Овај водич покрива: шта свака кључна реч заправо значи, шест образаца које ћете видети у свакој позадинској кодној бази, када да дефинишете сопствене изузетке и три анти-обрасца која дозвољавају да грешке прођу поред ваших тестова.
Четири кључне речи, тачно
Клаузула елсе се недовољно користи. Каже „овај следећи део зависи од успеха покушаја, али не желим да га штити исто осим“. То је право место за наставак срећног пута — стављањем у „покушај“ случајно се хватају неповезани изузеци од брод(резултат).
Шест образаца
1. Покушајте поново на пролазном неуспеху
Правило: покушајте поново САМО на пролазним грешкама (мрежа, временско ограничење, 429, 503). Никада не покушавајте поново са ВалуеЕррор, КеиЕррор, ТипеЕррор — то су грешке кода, а поновни покушај само покреће грешку три пута.
2. Чувајте са елсе
елсе гарантује да је датотека успешно отворена И обухвата чишћење са витх. Напомена: процесс() може подићи ВалуеЕррор — то ће се ширити, НЕЋЕ бити ухваћено од стране осим ФилеНотФоундЕррор.
3. Чишћење помоћу коначно (пре него што је постојало витх)
У модерном коду бисте користили витх дб.цоннецт() као цонн: — витх је шећер у односу на покушај / коначно за уобичајени случај чишћења. Посегните за експлицитним „коначно“ само када ресурс не подржава протокол менаџера контекста.
4. Поновно подизање са додатним контекстом
подигните НевЕкцептион(...) из е ланаца оригиналног изузетка на нови тако да праћење показује ОБА. Никада не пишите раисе НевЕкцептион(стр(е)) — то одбацује оригинално праћење.
5. Ухватите најужи изузетак који можете
Правило: што је ужи осим, то боље. Ако не знате шта процес може да покрене, покрените га и сазнајте. осим изузетка: је мирис кода у 90% времена.
6. раисе унутар осим — ре-раисе чисто
Голо повишење чува оригинални трацебацк нетакнутим. Никад не подижите е (Питхон 3 је паметан у вези са тим, али голо повишење је идиоматски облик).
Прилагођени изузеци — када се исплати
Дефинишите сопствену класу изузетака када:
1. Позиваоци морају посебно да осим МиЕррор: (тј. имате АПИ који се може позвати и корисници морају да се гранају према типу грешке).
2. Ваша библиотека/услуга изазива више повезаних грешака које деле контекст.
Сада позиваоци могу ухватити широко (осим ПаиментЕррор) или уско (осим ЦардДецлинедЕррор). Структурирани атрибути на изузетку (е.цард_ласт4) омогућавају руковаоцима грешкама да изграде користан кориснички интерфејс без рашчлањивања порука о изузетцима.
Против шаблона: дефинисање прилагођеног изузетка који постоји само да би се покренуо једном и никада није ухваћен. То је само подићи ВалуеЕррор("..."). Прилагођени изузеци зарађују на тежини тиме што су ухваћени.
Три анти-обрасци која скривају грешке
Анти-шаблон 1: Голи осим
Голи осим хвата сигнале који би требало да изађу из програма (Цтрл-Ц, сис.екит, МемориЕррор). Никад не пиши ово. Ако заиста желите да ухватите сваки изузетак који није фаталан, користите осим изузетка: — који ЈОШ УВЕК хвата превише, али барем поштује Цтрл-Ц.
Анти-шаблон 2: Утишавање без евидентирања
Сваки ухваћени изузетак треба или да се обради (са одређеним резервним) или да се евидентира. пасс ин ан осим је грешка у успореном снимку — изгледа да код ради док тихо одбацује податке.
Анти-шаблон 3: осим изузетка: око свега
Проблем: ако је стрипе.цхарге успео, али сенд_рецеипт није успео, клијенту је наплаћено А ви сте прогутали грешку. осим покрива четири различита начина рада и не можете их разликовати.
Поправка: сузите опсег покушаја + гранајте осим по граници модула.
Сваки покушај покрива ЈЕДНУ операцију. Сваки осим зна шта да ради у вези са ОВОМ специфичном грешком. То је руковање грешкама на нивоу производње.
Добро руковање грешкама је више дизајн него синтакса. покушај / осим / остало / коначно вам даје алате; дисциплина је одабир правог осим типа, најужи могући опсег покушаја и никада не утишавање грешака које не разумете.
Следећи корак: Фоундатионс трацк има 10 лекција о руковању изузетцима, прилагођеним изузецима и наредби витх — са правим Питхон-ом који ради у вашем претраживачу.