2010-09-22 14 views
71

Şu anda Python kullanan sunucularımızdan birinde kullanmak için küçük bir komut dosyası yazıyorum. Sunucu sadece Python 2.4.4 yüklüdür.Python'da dosyaları güvenli bir şekilde açma/kapatma 2.4

Ben 2.5 kadar Python kullanarak başlamadı dışarı, bu yüzden forma alışığım: Ancak

with open('file.txt', 'r') as f: 
    # do stuff with f 

, orada 2.5 önce hiçbir with ifadesi olduğunu ve sorun bulmakta örnekler sahip olduğum Bir dosya nesnesini el ile temizlemenin doğru yolu hakkında.

Python'un eski sürümlerini kullanırken dosya nesnelerini güvenle atmanın en iyi yolu nedir?

cevap

116

Kullanım try/finally:

f = open('file.txt', 'r') 

try: 
    # do stuff with f 
finally: 
    f.close() 

Bu # do stuff with f bir özel durum bile, f hala düzgün kapalı olacağını garanti eder.

, try'un numarasının dışında görünmelidir. open'un kendisi bir istisna oluşturuyorsa, dosya açılmamış ve kapatılmasına gerek yoktur. Ayrıca, open bir özel durumu yükseltirse, f'a atanmış değil değil ve f.close() numaralı telefonu aramak bir hatadır. İşte

+0

Çok basit, teşekkürler. Bazı nedenlerden dolayı daha çok ilgili bir şeye ihtiyacım olacağını bekliyordum. –

+14

Eğer 'open' başarısız olursa, 'try/finally' bloğu bile girilmeden önce bir istisna oluşturulacaktır. Yani 'kapat' çağrılmayacak. (Bu yüzden, 'try' den önce 'open 'demelisiniz.) – FogleBird

+1

@TM Bir istisnayı yükselterek' open 'hakkında bir not ekledim. –

-4

close

from sys import argv 
script,filename=argv 
txt=open(filename) 
print "filename %r" %(filename) 
print txt.read() 
txt.close() 
print "Change the file name" 
file_again=raw_input('>') 
print "New file name %r" %(file_again) 
txt_again=open(file_again) 
print txt_again.read() 
txt_again.close() 

Bu dosya açıldığında kaç kez gerekli olduğunu tekrarladı olduğu zamanlar. Yukarıdaki çözümde

+1

Eğer 'open' sonra 'kapat 'dan sonra bir istisna kaldırılırsa, dosya bu yaklaşımı kullanarak düzgün şekilde kapatılmaz. 'With' veya' try'/'nihayetinin kullanılması, istisnaların varlığında bile dosyayı düzgün bir şekilde kapatır. –

26

, kapatmak zorunda open nasıl kullanılacağı verilen örnek ve "piton olduğunu burada: kötü bir şey olursa

f = open('file.txt', 'r') 

try: 
    # do stuff with f 
finally: 
    f.close() 

başarıyla dosyayı açtıktan sonra ve inci önce (siz ... belli olmaz) e deneyin, dosya kapalı olmayacaktır, bu yüzden daha güvenli bir çözümdür:

f = None 
try: 
    f = open('file.txt', 'r') 

    # do stuff with f 

finally: 
    if f is not None: 
     f.close() 
+5

Bu doğru. Neden reddedildi? – Dexter

İlgili konular