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
Indeks 15.7 Rezime

Primjedbe

Popularno

Kako televizija štetno utiče na Vaše zdravlje finansije?

Da li je TV kviz Slagalica "prevara"?

Tu je novi Qt creator 4.4.0!

Kada prijatelji odlaze

Microsoft objavio - nova verzija Windowsa stiže...

Opet su se pojavili lažni kuponi brenda "IDEA" na društvenim mrežama

Najgore obrade velikih rock hitova

Sitnije promene na blogu...

Poslednji pozdrav izgubljenom vremenu

Prevelika očekivanja