2016-11-17 74 views
0

我在網上搜索這個問題的答案。也許它只是有點太具體,但這裏就是這樣。如何使用Python FileNotFoundError打印丟失文件的名稱?

我正在通過關於Python的速成課程文本工作,並且可能在此時將被視爲高級初學者或初級中級從業者。

我試圖使用try-catch塊來顯示有關丟失的文件信息,使用與FileNotFoundError異常類型的異常,如下所示:

filename_1 = 'cats.txt' 
filename_2 = 'dogs.txt' 

    try: 
     with open(filename_1) as file_obj: 
     contents = file_obj.read() 
     contents = contents.split('\n') 
     print('\n\tContents of File \'cats.txt\':\n') 

     for line in contents: 
      print('\t', line) 

     print('\n') 


     with open(filename_2) as file_obj: 
      contents = file_obj.read() 
      contents = contents.split('\n') 
      print('\n\tContents of File \'dogs.txt\':\n') 

      for line in contents: 
      print('\t', line) 

      print('\n') 
    except FileNotFoundError: 
     print('\n\tSorry, \'', FileNotFoundError.__filename__, '\' not found.\n') 

我嘗試使用的屬性名稱文件名爲,這顯然不存在。但是我一直沒有找到合適的屬性來從錯誤中提取這些重要的數據。由於指定了兩個不同的文件名,它可能是不存在的那些文件中的任何一個。

Python是否在其內置的異常中提供了這種功能?它似乎應該。

任何幫助,非常感謝。謝謝。

真誠,

羅伯特Hieger

+0

您的縮進在「嘗試」和第一個「打開」時不正確。 – Karnage

回答

2

您可以找到從異常實例(而不是從類)。

try: 
    # your code opening files, etc. 
    # ... 
except FileNotFoundError as not_found: 
    print(not_found.filename) 
+0

您是否找到過'.filename'存在的文檔? –

+0

找到它:https://docs.python.org/3/library/exceptions.html#OSError –

+0

我通常會做一個'pdb.set_trace()',然後'dir(not_found)'來獲得所有的列表對象的屬性/方法。 – boertel

0

你真正的問題是你正在複製代碼。做一個功能,讓你不要重複自己,那麼你已經知道文件名:

def inspect_file(filename): 
    try: 
     with open(filename) as file_obj: 
      contents = file_obj.read() 
      contents = contents.split('\n') 
      print("\n\tContents of File '%s':\n" % filename) 

      for line in contents: 
       print('\t', line) 

      print('\n') 
    except FileNotFoundError: 
     print("\n\tSorry, '%s' not found.\n" % filename) 

inspect_file('cats.txt') 
inspect_file('dogs.txt') 
0

另一種方法是嘗試和捕捉任何錯誤,使用第一次嘗試後else子句:

filename_1 = 'cats.txt' 
filename_2 = 'dogs.txt' 

try: 
    with open(filename_1) as file_obj: 
     # do your thing 

except FileNotFoundError: 
    print('\n\tSorry, \'', filename_1, '\' not found.\n') 

else: 
    try: 
     with open(filename_2) as file_obj: 
      # do your thing 

    except FileNotFoundError: 
     print('\n\tSorry, \'', filename_2, '\' not found.\n')