2014-11-04 9 views
12

Şu anda Python 3 yerleşik bir istisna gerektiren bir projede Python 2 kullanıyorum: FileNotFoundError. Nasıl yaparım?FileNotFoundError'ı Python 3'ten nasıl alabilirim?

+0

Bunu yapamaz. Neden sadece istisnayı kendiniz tanımlamıyorsunuz? –

+0

'try' sonra' hariç: pass' – Hackaholic

+7

@Hackaholic Err ... no. Bunu neden yapmak istesin ki? –

cevap

20

Sen elbette istediğiniz herhangi istisnalar tanımlayabilirsiniz.

Ama size bir yararı olacak değiliz. FileNotFoundError'un tüm noktası, bir dosyada bulunamadı hatasıyla çalışan Python işleminin bu özel durumu artırmasıdır. Sadece kendi özel durumunuzu tanımlamak bunu doğru yapmayacaktır. Tek yapmanız gereken, uygun bir errno değerine sahip bir OSError (veya 2.x sürümüne bağlı olarak IOError). Bir özel FileNotFoundError'u işlemeye çalışırsanız, işleyiciniz hiçbir zaman aranmayacaktır.

Ee, ne gerçekten istediğiniz (örneğin) geçerli:

try: 
    f = open(path) 
except OSError as e: 
    if e.errno == errno.ENOENT: 
     # do your FileNotFoundError code here 
    else: 
     raise 
+2

[doğru istisna IOError] gibi görünüyor (https://docs.python.org/2/library/exceptions.html#exceptions.IOError). – Mansour

+2

@Mansour: 2.6-2.7 için, ikisi oldukça temiz bölünmüş durumda. Eski sürümler için (özellikle de CPython kullanmıyorsanız), farklı bir hikaye (ve soket bağlantı hataları gibi bazı şeyler _neither_ idi). Bu nedenle "2.x sürümüne bağlı". Güvende olmak için, her zaman her ikisini de yakalayabilir veya ortak alt sınıf olan EnvironmentError'a (1,5'e geri dönmeniz gerekmedikçe) sahip olabilirsiniz. – abarnert

+0

Örneği okudum, metni tamamen görmezden geliyorum! – Mansour

2

Sadece kendiniz FileNotFoundError istisna oluşturabilir:

class FileNotFoundError(OSError): 
    pass 

Bu yeni durum sınıfı sadece Python 3.x gibi OSError devraldığı İşte

Python User-defined Exceptions bir referanstır.

2

yerine IOError kullanabilirsiniz:

Yükseltilmiş zaman böyle bir baskı ifadesi olarak bir G/Ç işlemi (Yerleşik open() işlevi veya bir dosya nesnesinin yöntemi), G/Ç ile ilgili bir nedenle , örneğin “dosya bulunamadı” veya “disk dolu” için başarısız olur.

Bu sınıf EnvironmentError türetilmiştir. İstisna örneği öznitelikleri hakkında daha fazla bilgi için yukarıdaki tartışmaya bakın. bir temel sınıf olarak kullanmak için değiştirildi socket.error:

sürüm 2.6 değiştirildi.

+0

Biraz daha bağlam sağlayabilir misiniz? Genellikle, bir cümle cevapları SO üzerinde yeterli değildir. – sadmicrowave

+0

Belgelere bir bağlantı veya alıntı, harika olurdu. ^^ Bu çok daha kapsamlı +1 – sadmicrowave

+1

Alıntı ekledim. ve "dosya bulunamadı" parçasını vurguladı :-) –

İlgili konular