2015-11-08 90 views
1

我正在學習Python 3並嘗試編寫將複製目錄的腳本。我正在使用shutil.copytree。從Python文檔中可以看到:在Python中正確實現Shutil.Error

如果發生異常,則會引發一個錯誤,並列出一些原因。

此異常收集多文件操作期間引發的異常。對於copytree(),異常參數是一個列表 三元組(srcname,dstname,exception)。

example他們這樣做:

except Error as err: 
      errors.extend(err.args[0]) 

這裏是我的腳本:

def copyDirectory(src, dest): 

    errors = [] 

    try: 
     shutil.copytree(src, dest) 
    except Error as err: 
      errors.extend(err.args[0]) 

source="C:/Users/MrRobot/Desktop/Copy"  
destination="C:/Users/MrRobot/Desktop/Destination" 

copyDirectory(source, destination) 
moveDirectory(destination,"I:/") 

問題:

  1. 你如何正確地捕獲一個除使用shutil.copytree時可能發生的離子(假設我的上述腳本不正確)?

  2. 你怎麼看待發生的錯誤,我會循環訪問errors數組?

回答

2

您需要可以包含模塊的名字,當你捕捉到了異常:

except shutil.Error as err: 

或顯式導入:

from shutil import copytree, Error 

# the rest of your code... 

try: 
    copytree(src, dest) 
except Error as err: 
     errors.extend(err.args[0]) 

要查看回溯和異常信息,你有幾種選擇:

  1. 不要發現異常。您的腳本將被暫停並打印所有錯誤信息。

  2. 如果您希望腳本繼續,那麼您確實需要複製this SO question。我會參考這個問題;接受的答案寫得很好。

順便說一句,你應該避免將它稱爲一個數組。此特定異常對象的listtuplesarrays是完全不同的數據結構。

+0

快速的問題,我怎麼才能查看錯誤,只是通過錯誤數組循環? –

+0

@MrRobot請參閱編輯。 – skrrgwasme

+0

爲了我自己的理解,你能告訴我如何實現追溯功能嗎? –