Naredba with

15.6 Naredba with 

Hvatanje grešaka sa komandom try, i kasnija obrada tih grešaka, pomoću komande finally, je najčešće korišćena metoda prilikom rada mnogih programera. Ali, postoji i komanda with, koja nam omogućava da se „hvatanje grešaka“ pri radu sa fajlovima,o uradi na mnogo jednostavniji način.
Pre nego što objasnimo način rada pomoću with komande, potrebno je da ti objasnim šta se dešava „iza scene“ pri radu sa fajlovima u Pythonu.
Kada Python radi sa fajlovima, on koristi takozvane protokole. Nazovimo fajl jednostavno – datoteka. Ovaj protokol se koristi prilikom rada sa objektom koji nam je kreirala funkcija open(). 
Kada Python shvati da se radi o nekoj datoteci, njegov protokol uvek poziva funkciju datoteka.__enter__() , i to pre početka izvršavanja naredbi vezanih za rad sa fajlom, i uvek poziva funkciju datoteka.__exit__() nakon završetka naredbi vezanih za dotičan fajl. 
Dakle, blok naredbi koji smo pisali ispod komande finally, će automatski biti pozvan od strane __exit__ metode. No, da bi smo izbegli korišćenje komandi try i finally, koje za nas rešavaju problem datoteka.__exit__() , mi možemo koristiti naredbu with, koja Pythonu govori da – čak i ako se desi neka greška, on mora pozvati __exit__ kako bi se fajl ispravno zatvorio.
Zbog toga što with komanda mora unapred kazati Pythonu da je objekat datoteke važan, njena upotreba je – prilično jednostavna:
>>> with open('Vesela pesma.txt') as pesma: 
... for stih in pesma:
... print(stih, end ='')
... print()
...
Kada svetlost obiđe
u tvom malom oku
svoj poslednji krug
iznad nezahvalne zemlje.

I kada se digne tama
iz debelog sna,
da naplati svoj
kamatom natopljeni dug.

Ti ne daj da tvoja mala nada
ostane, bez sveće, sama....
postani joj, u tom teškom boju
za ljubav, najbolji drug.

A, pogledaj, u svoju torbu
malo i skriveno, oružije je tu.
Python se zove, pa sa njim
Nada i Ti - zajedno,
izgradite Vaš jedini put.
>>>

Kao i kod finally, komanda with zatvara fajl samo u slučaju kada se desila greška. Razlika je u tome što u ovom slučaju, umesto try bloka naredbi, mi koristimo kombinaciju open() funkcije sa naredbom with – tj mi prepuštamo da nam u slučaju greške zatvaranje datoteke automatski uradi komanda with open().
Više korisnih saveta i uputa na ovu temu je izvan okvira ovog tutorijala, ali ti sam možeš to da proučiš. Pogledaj PEP 343 za objašnjenje svega što ti je možda nejasno.

15.5 Korišćenje naredbi
try i finally
Indeks15.7 Rezime

Коментари