Во-первых, я буду вторым номинацией фреймворка логирования Python . Однако будьте осторожны с тем, как вы его используете. В частности: позвольте фреймворку ведения журнала расширять ваши переменные, не делайте этого самостоятельно. Например, вместо:
logging.debug("datastructure: %r" % complex_dict_structure)
убедитесь, что вы делаете:
logging.debug("datastructure: %r", complex_dict_structure)
потому что, хотя они выглядят одинаково, первая версия требует затрат на repr (), даже если она отключена . Вторая версия избегает этого. Точно так же, если вы катаетесь самостоятельно, я бы предложил что-то вроде:
def debug_stdout(sfunc):
print(sfunc())
debug = debug_stdout
Вызывается через:
debug(lambda: "datastructure: %r" % complex_dict_structure)
что, опять же, позволит избежать накладных расходов, если вы отключите его, выполнив:
def debug_noop(*args, **kwargs):
pass
debug = debug_noop
Накладные расходы на вычисление этих строк, вероятно, не имеют значения, если только они 1) не дороги в вычислении или 2) оператор отладки находится в середине, скажем, цикла n ^ 3 или чего-то еще. Не то чтобы я что-нибудь об этом знал.