ZZZ
Март 2, 2011 09:52:46
pyuser
тогда уж и argparse прикрутить
В идеале да. Но на практике, для админа оно обычно не важно.
А вот перенаправить лог в /var/log без особых сложностей бывает очень важно.
zloymih
Март 2, 2011 11:36:57
Поправил скрипт, с учетом замечаний. С логами кажется перемудрил… :) Может попроще можно сделать? Хотелось чтоб и на экраны выводилось и в файл.
ZZZ
Ещё момент… Не надо в try такой здоровый кусок кода вписывать
Выделяю такой кусок, потому, что если прав доступа к файлу нет, то программа вываливается при попытке получить время изменения файла
d2 = datetime.datetime.fromtimestamp(os.path.getmtime(file))
Или в этом случае на 2 try разбить??
indus
Март 2, 2011 12:30:03
ZZZ
indus
не обязательно. конкретное исключение имеет смысл отлавливать только тогда, когда нужна конкретная информация об исключении :) во всех остальных случаях все сливается в /dev/null
Я не понял смысла фразы. Так или иначе, ловить все исключения (или Exception), это очень плохая практика.
Тут куда правильнее отловить только OSError, а во всех остальных случаях просто грохнуться с соответствующим матом. А то наличие реальной ошибки может быть замечено лишь тогда, когда с файлами уже произойдёт нечто страшное. В Дзен на эту тему есть: Errors should never pass silently.
попробую пояснить. когда я делаю так:
try:
do smthing
except:
pass or return with specific error code
…я не ловлю исключения, а избавляюсь от них + использую как способ вернуть код ошибки там, где это не реализовано (т.е. например если ф-ция не возвращает а выкидывает исключение). в общем-то распространенные приемы. в одной из своих тем, я уже выразил свое Фи тому, как питон на мой взгляд слишком часто использует исключения, где надо и где не надо - где можно было бы обойтись возвратом заведомо неверного значения (классика жанра).
но, вообще, Питон многое взял от Жавы, поэтому я смирился и просто стараюсь Жава-лайк кривизну обходить наиболее естественными для меня способами ;) да и код зачастую “чище”, без всяких там подразумеваний и недомолвок.
извините за оффтопик.
Андрей Светлов
Март 2, 2011 12:41:07
Не брал Питон он Явы - он ее немного старше. :) Исключения были с самого начала (правда, только строковые).
Борьба с исключениями - это очень сильный ход. И оригинальный, к тому же. Во всем остальном мире ведут борьбу за повсеместное применение исключений как сигнализации об ошибке. В целях как раз уйти от недомолвок и неоднозначностей.
Вам как, применение классов не жмет?
indus
Март 2, 2011 12:53:20
Андрей Светлов
в умных книжках по Питону пишут что взял от Жавы кое какие концецпии. Да и ООП у него больше жавское чем С++. естественно Питон старше Жавы, только причем здесь это? ;)
Я не брюсь с исключениями, вы либо не внимательно прочитали либо опять меня не поняли =) В том что я написал нет ничего оригинального уже очень давно =))) иначе я бы с удвольствием запатентовал ;)
Применение классов не жмет уже хрен знает сколько лет. А почему такой странный вопрос?
Андрей Светлов
Март 2, 2011 13:06:06
Исключения к заимствованным из Явы концепциям не относятся. То же касается и ООП.
Возврат заведомо неверного кода ошибки - да, классика жанра. Как и использование, например, errno для последующей расшифровки.
Но применение этого способа поверх уже существующих исключений - действительно новое слово в программировании. Можете смело патентовать!
zloymih
Март 2, 2011 13:12:26
Ну, пошел флуд :). Я конечно не против - это порой бывает интересно, но все-таки подскажите - логи я правильно обрабатываю? Дайте пищи для ума ;)
indus
Март 2, 2011 13:26:16
Андрей Светлов
что касается заимствований из Жавы, сейчас кроме мусорщика пока вспомнить ничего не могу, попадется что-то на глаза - запомню для дальнейших бесед =)
Естественно сами исключения и ООП не могут быть Жавскими, С++, Смаллталковскими и т.п., я имел ввиду их реализацию.
Возврат заведомо неверного кода ошибки в Питоне используется наравне с исключениями. Более того, я иногда не вижу логики автора того или иного метода при выборе между исключением или возвратом значения. Похоже это очередная борьба бобра со злом, в том смысле что исключения использовать “более правильнее в ООП” =)))))
И мне совсем не понятна ваша негативная реакция на такое использование исключений, которое я описал. Этот подход используется с начала времен появления исключений вообще. Описан в куче учебников, рекомендуется многими (не в пример мне) мудрыми гуру, используется чуть менее чем везде ( внутри того же Питона, на этом форуме ;)) Тем более если это _единственный_ способ вернуть код ошибки (иногда, предствьте себе, в рамках какой-либо конкретной системы требуется именно это!), а метод использует только исключение(-я) - приходится создавать враппер и разворачивать сие недоразумение.
Так что все таки запатентовать не получится, еще сто лет назад такие монстры как Керниган уже поюзали этот способ =)
Андрей Светлов
Март 2, 2011 13:29:24
А вы все первое сообщение правите? Как-то незаметно.
Конфигурируйте корневой логер, который logging.getLogger()
А пишите в свой, как и сейчас поступаете.
Вместо
my_logger.info(“%s %s %s был удален” % (file.ljust(60),d2.strftime(“%Y-%m-%d %H:%M:%S”),days_diff))
Бывает удобно писать
my_logger.info(“%s %s %s был удален”, file.ljust(60), d2.strftime(“%Y-%m-%d %H:%M:%S”), days_diff)
Не называйте d1, d2. Придумайте более говорящие названия. Испытываете проблемы с английским - пишите по русски.
zloymih
Март 2, 2011 14:36:23
Андрей Светлов
Конфигурируйте корневой логер, который logging.getLogger()
Честно, не совсем понял, как это сделать. Взял пример отсюда
http://docs.python.org/dev/howto/logging-cookbook.html. В целом я доволен результатом.