2012-07-04 29 views
1

我是一個初學者python程序員使用它進行簡單的管理任務。嘗試語句不捕獲複製錯誤python

我寫了一個小日誌移動代碼(因爲我有一個系統生成大量的日誌文件,從服務器移動到存儲)。

我在遠程路徑上的文件上獲得權限錯誤,但在嘗試複製時拒絕了權限,因此已將此程序包裝在try:語句中,以嘗試並通過錯誤但腳本仍在結束... line 32是shutil.copy2(位置,copylocation)。

基本路徑是本地目錄,日誌目錄是UNC路徑(附加了文件夾集)。早先在腳本中跨文件系統鏡像文件夾。 (所以應該永遠存在)。

其他嘗試的如os.remove工作OK。

如果任何人都可以指向我的大方向將不勝感激。

Traceback (most recent call last): 
    File "C:\Program Files (x86)\Log Mover\log_mover.py", line 32, 
    shutil.copy2 (location,copylocation) 
    File "C:\Python27\lib\shutil.py", line 127, in copy2 
    copyfile(src, dst) 
    File "C:\Python27\lib\shutil.py", line 82, in copyfile 
    with open(dst, 'wb') as fdst: 
    IOError: [Errno 13] Permission denied: '\\\\XXXX\\d$\\logs\\ 
    logs/XXX\\XXX - 2012-07-03 21-49.XXXX' 
    ☀could not delete:C:/logs/XX\XXX\XXX 2012-07-04 08-00-42.txt 
    Traceback (most recent call last): 


for root, dirs, files in os.walk(basepath): 
    for filenames in files: 
     location = os.path.join(root, filenames) 
     try: 
      datemod = time.strftime("%Y%m%d%H",time.localtime(os.path.getmtime(location))) 
     except OSError: 
      print "count not get mod time:"+location 
     if datemod != currtime: 
      drive,path = os.path.splitdrive(location) 
      copylocation = str(logdir)+str(path) 
      try: 
       shutil.copy2 (location,copylocation) 
      except OSError: 
       print "could not copy" 
      pass 

      if os.path.getsize(location) == os.path.getsize(copylocation): 
       try: 
        os.remove(location) 
        print "Deleted"+location 
       except OSError: 
        print "could not delete:"+location 
       pass 
      else: 
       print "sizes dont match" 

感謝

肯尼

+0

你必須趕上一個'IOError',而不是'OSError' – damned

回答

3

你試圖捕捉OSError,而你得到IOError。

補充一點:

except (OSError, IOError): 
    #some code 
+0

你好,是的,這工作非常感謝你 –

+1

在Python 3.3,所有這些錯誤都會被下合併'OSError'。 –

2

shutil.copy2拋出IOError,但你趕上OSError S,因此,它只是泡過去,未捕獲。