2012-07-04 5 views
1

Я начинающий программист на Python, использующий его для простых задач администратора.Try statement not catching error error python

Я написал небольшой код перемещения журнала (поскольку у меня есть система, которая генерирует много файлов журнала, которые перемещаются с сервера на хранение).

Я получаю ошибку разрешений в файле на удаленном пути, разрешенное разрешение при попытке копирования, поэтому они были завернуты в оператор try: попытаться передать ошибку, но сценарий все еще заканчивается ... строка 32 - shutil.copy2 (местоположение, копирование).

Базовый путь - это локальный каталог, а log dir - путь UNC (который добавляется вместе с набором папок). Папки зеркалируются в обеих файловых системах ранее в скрипте. (так всегда должно существовать).

Другие попытки, такие как os.remove, работают нормально.

Если бы кто-нибудь мог указать мне в общем направлении, было бы полезно.

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" 

Благодаря

Kenny

+0

Вы должны поймать 'IOError' вместо' OSError' – damned

ответ

3

Вы пытаетесь поймать OSError, пока вы получаете IOError.

Добавить это:

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

Привет, Да это работало большое спасибо –

+1

В Python 3.3, все эти ошибки будут объединены под 'OSError'. –

2

shutil.copy2 бросает IOError, но вы ловли OSError с, так что поэтому он просто пузыри прошлое, перехватывается.