В последнее время я много кодирую на Python. И я работал с данными, с которыми раньше не работал, используя формулы, которых раньше не видел, и имел дело с огромными файлами. Все это заставило меня написать множество операторов печати, чтобы проверить, все ли в порядке, и определить точки отказа. Но, как правило, вывод такого большого количества информации - не лучшая практика. Как мне использовать операторы печати только тогда, когда я хочу отладить, и позволять их пропускать, когда я не хочу, чтобы они печатались?
110
level
вbasicConfig
вызове установил наlogging.ERROR
.logging.basicConfig(stream=sys.stderr, level=logging.ERROR)
будет иметь никакого эффекта. Перезагрузка ядра и установка нового уровня работают, но для меня это обходной путь.Простой способ сделать это - вызвать функцию регистрации:
Затем вы можете изменить значение
DEBUG
и запустить свой код с ведением журнала или без него.Стандартный
logging
модуль имеет более сложный механизм для этого.источник
logging
работает (на очень простом уровне).Используйте модуль встроенной библиотеки журналирования вместо печати.
Вы создаете
Logger
объект (скажемlogger
), а затем после этого, когда вы вставляете отладочную печать, вы просто помещаете:Вы можете использовать
logger.setLevel
в начале программы, чтобы установить выходной уровень. Если вы установите его в DEBUG, он распечатает все отладки. Установите его в INFO или выше, и сразу все отладки исчезнут.Вы также можете использовать его для регистрации более серьезных вещей на разных уровнях (ИНФОРМАЦИЯ, ПРЕДУПРЕЖДЕНИЕ и ОШИБКА).
источник
Во-первых, я буду вторым номинацией фреймворка логирования Python . Однако будьте осторожны с тем, как вы его используете. В частности: позвольте фреймворку ведения журнала расширять ваши переменные, не делайте этого самостоятельно. Например, вместо:
убедитесь, что вы делаете:
потому что, хотя они выглядят одинаково, первая версия требует затрат на repr (), даже если она отключена . Вторая версия избегает этого. Точно так же, если вы катаетесь самостоятельно, я бы предложил что-то вроде:
Вызывается через:
что, опять же, позволит избежать накладных расходов, если вы отключите его, выполнив:
Накладные расходы на вычисление этих строк, вероятно, не имеют значения, если только они 1) не дороги в вычислении или 2) оператор отладки находится в середине, скажем, цикла n ^ 3 или чего-то еще. Не то чтобы я что-нибудь об этом знал.
источник
Не знаю, как другие, но меня использовали для определения «глобальной константы» (
DEBUG
), а затем глобальной функции (debug(msg)
), которая будет печатать,msg
только еслиDEBUG == True
.Затем я пишу свои отладочные операторы, например:
... затем я беру модульное тестирование и больше никогда этого не делал! :)
источник
print()
пока мой код доведен до необходимого уровня для прохождения теста. Я никогда не получаю огромное количествоprint()
всего. Ведение журнала тоже круто! :)