#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