Нужна помощь с Python для удаления старого скрипта dirs

#python #linux

#python #linux

Вопрос:

Это функция, которую я использую для удаления старых каталогов в python

 def delete_olddirs(days,file_path):
     numdays = 60*60*24*days
     now = time.time()

     for dir in os.listdir(file_path):
              r = file_path
              timestamp = os.path.getmtime(os.path.join(r,dir))
              if now-numdays > timestamp:
                  try:
                       print "removing ",os.path.join(r,dir)
                       #shutil.rmtree(os.path.join(r,dir))  #uncomment to use
                  except Exception,e:
                       print e
                       pass
                  else:
                       print "some message for success"
  

Проблема в том, что каждый раз, когда я вижу сообщение removing . .... , я также вижу сообщение

 some message for success
  

Я хочу знать, почему else часть выполняется каждый раз

Ответ №1:

http://docs.python.org/reference/compound_stmts.html#the-try-statement

Необязательное else предложение выполняется, если и когда управление вытекает из конца try предложения. [2] Исключения в else предложении не обрабатываются предыдущими except предложениями.

Кажется ясным.

Ответ №2:

Бит else выполняется при успешном запуске, вы неправильно понимаете его назначение. Смотрите:http://docs.python.org/tutorial/errors.html

Ответ №3:

else Часть try выполняется, если не было вызвано никаких исключений.

Ответ №4:

Вы используете блок try / except / else. Если блок try завершится успешно (ничего не поймано с помощью except), то будет выполнен блок else. Это нормальное поведение.

Ответ №5:

Попробуйте это

     l=[]
    for dir in os.listdir(file_path):
        r = file_path
        timestamp = os.path.getmtime(os.path.join(r,dir))
        if now-numdays > timestamp:
            try:
                print "removing ",os.path.join(r,dir)
                #shutil.rmtree(os.path.join(r,dir))  #uncomment to use
                l.append("%s" %os.path.join(r,dir))
            except Exception,e:
                 print e
    print "removed the following folders %s" %L