2016-03-18 11 views
19

İyi olmayan bir üçüncü taraf kitaplığı kullanıyorum ancak uygun olmayan dosyaları istediğim gibi kullanmıyorum. bunu bir var olmayan bir dosya vererek yerine eski güzelFileNotFoundError'ı nasıl düzgün bir şekilde yükseltirim?

FileNotFoundError: [Errno 2] No such file or directory: 'nothing.txt' 

yükseltirken bazı karanlık mesaj yükseltir: eksik dosyayı işlemek istemiyorum

OSError: Syntax error in file None (line 1) 

, istemiyoruz istisnayı yakalamak veya işlemek için, özel bir istisnayı yükseltmek istemiyorum, ne de open dosyasını istiyorum, yoksa mevcut değilse oluştur.

Sadece bunu kontrol etmek istiyorum (os.path.isfile(filename) hile yapar) ve değilse, sadece uygun bir FileNotFoundError'ı kaldırın.

Traceback (most recent call last): 
    File "./test_script.py", line 6, in <module> 
    raise FileNotFoundError 
FileNotFoundError 

Buna "dosya Yok sözdizimi hatası" daha iyidir, ama nasıl yükseltmek mümkün "gerçek" dir:

#!/usr/bin/env python3 

import os 

if not os.path.isfile("nothing.txt"): 
    raise FileNotFoundError 

Ne tek çıkışları:

Bu çalıştı Python istisnası, yeniden iletime gerek kalmadan uygun mesajla mı? argümanlar içinde

cevap

33

Geçiş:

import errno 
import os 

raise FileNotFoundError(
    errno.ENOENT, os.strerror(errno.ENOENT), filename) 

FileNotFoundError birkaç argüman alır OSError bir alt sınıf vardır. Birincisi, errno module (dosya bulunamadı her zaman errno.ENOENT), hata mesajının ikinci bir hata kodudur (bunu elde etmek için os.strerror() kullanın) ve dosya adını 3. olarak geçirin. Bir traceback kullanılan

son dize gösterimi fikir tartışmalarının inşa edilmiştir:

>>> print(FileNotFoundError(errno.ENOENT, os.strerror(errno.ENOENT), 'foobar')) 
[Errno 2] No such file or directory: 'foobar' 
+0

Mükemmel! Bunu yazmanın doğru yolunu bulmak için çok uğraştım. – zezollo

+0

@zezollo: Cevabı güncelledim; 'Os.strerror()' ı şimdi buldum (* bir hata mesajı numarasından bir yere bir haritalama olduğunu biliyordum). –